Exemplo n.º 1
0
        /// <summary>
        /// Displays the pass associated with <paramref name="item"/> in the editing controls.
        /// </summary>
        /// <param name="item">The <see cref="ListViewItem"/> containing the pass to edit.</param>
        private void DisplayPass(ListViewItem item)
        {
            currentPass = item;
            ErasureMethodPass pass = (ErasureMethodPass)item.Tag;

            passEditor.PassData = (byte[])pass.OpaqueValue;
            passEditor.PassType = pass.Function == PassBasedErasureMethod.WriteRandom ?
                                  CustomMethodPassEditorPassType.Random :
                                  CustomMethodPassEditorPassType.Text;
        }
Exemplo n.º 2
0
        private void passesDuplicateBtn_Click(object sender, EventArgs e)
        {
            //Save the current pass to prevent data loss
            SavePass(currentPass);

            foreach (ListViewItem item in passesLv.SelectedItems)
            {
                ErasureMethodPass oldPass = (ErasureMethodPass)item.Tag;
                ErasureMethodPass pass    = new ErasureMethodPass(
                    oldPass.Function, oldPass.OpaqueValue);
                AddPass(pass);
            }
        }
Exemplo n.º 3
0
        protected CustomErasureMethod(SerializationInfo info, StreamingContext context)
        {
            Name            = info.GetString("Name");
            Guid            = (Guid)info.GetValue("GUID", Guid.GetType());
            RandomizePasses = info.GetBoolean("RandomizePasses");
            List <PassData> passes = (List <PassData>)
                                     info.GetValue("Passes", typeof(List <PassData>));

            Passes = new ErasureMethodPass[passes.Count];
            for (int i = 0; i != passes.Count; ++i)
            {
                Passes[i] = passes[i];
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Saves the currently edited pass details to memory.
        /// </summary>
        private void SavePass(ListViewItem item)
        {
            ErasureMethodPass pass = (ErasureMethodPass)item.Tag;

            if (passEditor.PassType == CustomMethodPassEditorPassType.Random)
            {
                pass.Function         = PassBasedErasureMethod.WriteRandom;
                pass.OpaqueValue      = null;
                item.SubItems[1].Text = S._("Random Data");
            }
            else
            {
                pass.Function         = PassBasedErasureMethod.WriteConstant;
                pass.OpaqueValue      = passEditor.PassData;
                item.SubItems[1].Text = S._("Constant ({0} bytes)", passEditor.PassData.Length);
            }
        }
Exemplo n.º 5
0
 public PassData(ErasureMethodPass pass)
 {
     if (pass.Function == PassBasedErasureMethod.WriteConstant)
     {
         Random      = false;
         OpaqueValue = pass.OpaqueValue;
     }
     else if (pass.Function == PassBasedErasureMethod.WriteRandom)
     {
         Random = true;
     }
     else
     {
         throw new ArgumentException(S._("The custom erasure method can only comprise " +
                                         "passes containing constant or random passes"));
     }
 }
Exemplo n.º 6
0
        /// <summary>
        /// Adds the given pass to the displayed list of passes.
        /// </summary>
        /// <param name="pass">The pass to add.</param>
        /// <returns>The item added to the list view.</returns>
        private ListViewItem AddPass(ErasureMethodPass pass)
        {
            ListViewItem item = new ListViewItem((passesLv.Items.Count + 1).ToString(
                                                     CultureInfo.CurrentCulture));

            item.Tag = pass;
            if (pass.Function == PassBasedErasureMethod.WriteRandom)
            {
                item.SubItems.Add(S._("Random Data"));
            }
            else
            {
                item.SubItems.Add(S._("Constant ({0} bytes)", ((byte[])pass.OpaqueValue).Length));
            }

            passesLv.Items.Add(item);
            return(item);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Shuffles the passes in the input array, effectively randomizing the
        /// order or rewrites.
        /// </summary>
        /// <param name="passes">The input set of passes.</param>
        /// <returns>The shuffled set of passes.</returns>
        protected static ErasureMethodPass[] ShufflePasses(ErasureMethodPass[] passes)
        {
            //Make a copy.
            ErasureMethodPass[] result = new ErasureMethodPass[passes.Length];
            passes.CopyTo(result, 0);

            //Randomize.
            IPrng rand = Host.Instance.Prngs.ActivePrng;

            for (int i = 0; i < result.Length; ++i)
            {
                int val = rand.Next(result.Length - 1);
                ErasureMethodPass tmpPass = result[val];
                result[val] = result[i];
                result[i]   = tmpPass;
            }

            return(result);
        }
Exemplo n.º 8
0
        private void passesAddBtn_Click(object sender, EventArgs e)
        {
            //Save the current pass being edited
            if (currentPass != null)
            {
                SavePass(currentPass);
            }

            //Then create a new, random pass, adding it to the list
            ErasureMethodPass pass = new ErasureMethodPass(PassBasedErasureMethod.WriteRandom, null);
            ListViewItem      item = AddPass(pass);

            //If a pass is currently selected, insert the pass after the currently selected one.
            if (passesLv.SelectedIndices.Count > 0)
            {
                item.Remove();
                passesLv.Items.Insert(passesLv.SelectedIndices[passesLv.SelectedIndices.Count - 1] + 1,
                                      item);
                RenumberPasses();
            }
        }