Example #1
0
        void FindOrderThreaded()
        {
            try
            {
                int p = (int)Tab1nupFieldSize.Value;

                if (!MathTools.IsPrime(p))
                {
                    MessageBox.Show("Finite Field size must be a prime number!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }

                FiniteField F = new FiniteField(p);

                Polynomial P = Polynomial.Parse(F, Tab1txtPolyCoefs.Text.Trim(), true);
                Tab1lblResult.Text = "";
                Tab1lblResult.Text += "Recognized polynomial: " + P.ToString() + "\r\n\r\nComputing the order...\r\n\r\n";
                Application.DoEvents();

                int order = P.Order;

                Tab1lblResult.Text += "Order of the polynomial is " + order.ToString();
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message);
            }
        }
Example #2
0
        private void btnFixField_Click(object sender, EventArgs e)
        {
            int t = 0;
            bool dene = int.TryParse(txtSize.Text.Trim(), out t);
            if (dene)
            {
                if (MathTools.IsPrime(t))
                {
                    p = t;
                    F = new FiniteField(p);
                    lblInfo.Text = "Current Field: " + F.ToString();
                }
                else
                {
                    MessageBox.Show("Please enter a prime number!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    txtSize.Focus();
                }
            }
            else
            {
                MessageBox.Show("Please check the value you have written!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                txtSize.Focus();
            }

            btnFixField.Enabled = false;
            btnFixValues.Enabled = true;
            //lblInfo.Text = "Please enter the parameters";
        }
Example #3
0
        public static Polynomial Random(FiniteField F, int degree, Random rnd)
        {
            int[] coefs = new int[degree + 1];
            for (int i = 0; i < coefs.Length - 1; i++)
            {
                coefs[i] = rnd.Next(F.Elements[0].Value, F.Elements[F.Elements.Length - 1].Value + 1);
            }
            coefs[coefs.Length - 1] = rnd.Next(F.Elements[1].Value, F.Elements[F.Elements.Length - 1].Value + 1);
            Polynomial p = new Polynomial(F, coefs);

            return(p);
        }
Example #4
0
        /// <summary>
        /// If the characteristic of the finite field is less or equal then 7 you can't use seperators.
        /// Example; For char=5 you should write string as "11232340134324320"
        /// For char=11 you should write string as "1-10-0-8-2-1-3-10-9-2"
        /// You can use . , ; _ - and space char as seperator.
        /// </summary>
        /// <param name="F"></param>
        /// <param name="s"></param>
        /// <returns></returns>
        public static Polynomial Parse(FiniteField F, string s, bool trimZeros)
        {
            FiniteFieldElement[] list = new FiniteFieldElement[0];

            if (F.Characteristic > 7)
            {
                string[] slist = s.Split('.', ',', ';', '_', '-', ' ');

                for (int i = 0; i < slist.Length; i++)
                {
                    FiniteFieldElement f = new FiniteFieldElement();
                    f.Field = F;
                    f.Value = int.Parse(slist[i].ToString()) % F.Characteristic;

                    Array.Resize(ref list, list.Length + 1);
                    list[list.Length - 1] = f;
                }
            }
            else
            {
                for (int i = 0; i < s.Length; i++)
                {
                    FiniteFieldElement f = new FiniteFieldElement();
                    f.Field = F;
                    f.Value = int.Parse(s[i].ToString()) % F.Characteristic;

                    Array.Resize(ref list, list.Length + 1);
                    list[list.Length - 1] = f;
                }
            }

            // Trim 0s
            if (trimZeros)
            {
                int listlen = list.Length;
                for (int i = 0; i < listlen - 1; i++)
                {
                    if (list[listlen - i - 1].Value == 0)
                    {
                        Array.Resize(ref list, list.Length - 1);
                    }
                    else
                    {
                        break;
                    }
                }
            }

            return(new Polynomial(list));
        }
Example #5
0
        public Polynomial(FiniteField F, params int[] coefficients)
        {
            _coefficients = new FiniteFieldElement[0];

            for (int i = 0; i < coefficients.Length; i++)
            {
                FiniteFieldElement elt = new FiniteFieldElement();
                elt.Field = F;
                elt.Value = coefficients[i] % elt.Field.Characteristic;

                Array.Resize(ref _coefficients, _coefficients.Length + 1);
                _coefficients[_coefficients.Length - 1] = elt;
            }
        }
Example #6
0
        /// <summary>
        /// Generates a polynomial which consists only 1 term over given field F. e.g. (F,alfa,4) returns the polynomial alfa*x^4 over F and alfa in F.
        /// </summary>
        public static Polynomial GenerateFromTerm(FiniteField F, FiniteFieldElement Coefficient, int Degree)
        {
            if (F.Characteristic != Coefficient.Field.Characteristic)
            {
                throw new Exception("Coefficient must be an element of given Finite Field F.");
            }
            FiniteFieldElement[] coefs = new FiniteFieldElement[0];
            for (int i = 0; i < Degree; i++)
            {
                Array.Resize(ref coefs, coefs.Length + 1);
                coefs[coefs.Length - 1] = F.Elements[0];
            }
            Array.Resize(ref coefs, coefs.Length + 1);
            FiniteFieldElement f = Coefficient;

            coefs[coefs.Length - 1] = f;
            return(new Polynomial(coefs));
        }
        protected void btnRunBM_Click(object sender, EventArgs e)
        {
            FiniteField F = null;
            int p = int.Parse(txtSize.Text.Trim());
            if (MathTools.IsPrime(p))
            {
                F = new FiniteField(p);
            }
            else
            {
                Response.Clear();
                Response.Write("Please write a prime number!");
                Response.End();
            }

            // Clean The Mess
            string seq = txtSeq.Text, newseq = "";

            for (int i = 0; i < seq.Length; i++)
            {
                int t = 0;
                bool dene = int.TryParse(seq[i].ToString(), out t);
                if (dene)
                {
                    if (t < F.Characteristic)
                        newseq += seq[i];
                }
            }

            if (newseq.Length == 0)
            {
                Response.Clear();
                Response.Write("Please enter the sequence.");
                Response.End();
            }

            txtSeq.Text = newseq;
            Polynomial poly = Polynomial.Parse(F, newseq, false);
            Polynomial c;
            int LC = LFSRTools.BerlekampMassey(poly, out c);
            lblResult.Text = "Sequence Length = " + newseq.Length + "<br/>" +
                             "Linear Complexity = " + LC + "<br/>" +
                             "Connection Polynomial = " + c.ToString();
        }
Example #8
0
        void GetTab2Ready()
        {
            // Finite Field
            F3 = new FiniteField(3);

            // LFSR 1 - 3
            string strf1 = "201", stri1 = "001";
            Polynomial feedback1 = Polynomial.Parse(F3, strf1, false);
            Polynomial initial1 = Polynomial.Parse(F3, stri1, false);
            L1 = new LFSR(feedback1, initial1.Coefficients);
            Tab2lblLFSR1.Text += "\r\n" + "Feedback: " + Polynomial.Parse(F3, "1" + strf1, false).ToString() + "\r\nInitial: " + stri1 + "\r\nPeriod = " + L1.Period;

            // LFSR 2 - 4
            string strf2 = "2001", stri2 = "0001";
            Polynomial feedback2 = Polynomial.Parse(F3, strf2, false);
            Polynomial initial2 = Polynomial.Parse(F3, stri2, false);
            L2 = new LFSR(feedback2, initial2.Coefficients);
            Tab2lblLFSR2.Text += "\r\n" + "Feedback: " + Polynomial.Parse(F3, "2" + strf2, false).ToString() + "\r\nInitial: " + stri2 + "\r\nPeriod = " + L2.Period;

            // LFSR 3 - 5
            string strf3 = "20001", stri3 = "00001";
            Polynomial feedback3 = Polynomial.Parse(F3, strf3, false);
            Polynomial initial3 = Polynomial.Parse(F3, stri3, false);
            L3 = new LFSR(feedback3, initial3.Coefficients);
            Tab2lblLFSR3.Text += "\r\n" + "Feedback: " + Polynomial.Parse(F3, "1" + strf3, false).ToString() + "\r\nInitial: " + stri3 + "\r\nPeriod = " + L3.Period;

            // LFSR 4 - 7
            string strf4 = "0000201", stri4 = "1012220";
            Polynomial feedback4 = Polynomial.Parse(F3, strf4, false);
            Polynomial initial4 = Polynomial.Parse(F3, stri4, false);
            L4 = new LFSR(feedback4, initial4.Coefficients);
            Tab2lblLFSR4.Text += "\r\n" + "Feedback: " + Polynomial.Parse(F3, "1" + strf4, false).ToString() + "\r\nInitial: " + stri4 + "\r\nPeriod = 26 (precomputed)";// +L4.Period;

            // Nonlinear Combiner
            NonlinCombOutput = "";
            Tab2lblNonLinComb.Text += "\r\n(X1+X3) * (X2+X4)";
        }
Example #9
0
 private void Form1_Load(object sender, EventArgs e)
 {
     GF5 = new FiniteField(5);
     GF56Primitive = new Polynomial(GF5, 2, 0, 1, 4, 1, 0, 1);
     ExtF = new ExtensionField(GF56Primitive);
     lblInfo.Text = "Current Field Info: " + ExtF.ToString();
 }
Example #10
0
 private void txtSize_Leave(object sender, EventArgs e)
 {
     int t = 0;
     bool dene = int.TryParse(txtSize.Text.Trim(), out t);
     if (dene)
     {
         if (MathTools.IsPrime(t))
         {
             eskip = p;
             p = t;
             F = new FiniteField(p);
             lblInfo.Text = "Current Field: " + F.ToString();
             if (eskip > p)
             {
                 txtSeq.Clear();
                 txtResult.Clear();
             }
         }
         else
         {
             MessageBox.Show("Please enter a prime number!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
             txtSize.Focus();
         }
     }
     else
     {
         MessageBox.Show("Please check the value you have written!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
         txtSize.Focus();
     }
 }
 /// <summary>
 /// Generates a polynomial which consists only 1 term over given field F. e.g. (F,alfa,4) returns the polynomial alfa*x^4 over F and alfa in F.
 /// </summary>
 public static Polynomial GenerateFromTerm(FiniteField F, FiniteFieldElement Coefficient, int Degree)
 {
     if (F.Characteristic != Coefficient.Field.Characteristic)
     {
         throw new Exception("Coefficient must be an element of given Finite Field F.");
     }
     FiniteFieldElement[] coefs = new FiniteFieldElement[0];
     for (int i = 0; i < Degree; i++)
     {
         Array.Resize(ref coefs, coefs.Length + 1);
         coefs[coefs.Length - 1] = F.Elements[0];
     }
     Array.Resize(ref coefs, coefs.Length + 1);
     FiniteFieldElement f = Coefficient;
     coefs[coefs.Length - 1] = f;
     return new Polynomial(coefs);
 }
        public Polynomial(FiniteField F, params int[] coefficients)
        {
            _coefficients = new FiniteFieldElement[0];

            for (int i = 0; i < coefficients.Length; i++)
            {
                FiniteFieldElement elt = new FiniteFieldElement();
                elt.Field = F;
                elt.Value = coefficients[i] % elt.Field.Characteristic;

                Array.Resize(ref _coefficients, _coefficients.Length + 1);
                _coefficients[_coefficients.Length - 1] = elt;
            }
        }
 public ExtensionField(Polynomial primitivePolynomial)
 {
     this._baseField = primitivePolynomial.Field;
     this._primitivePolynomial = primitivePolynomial;
     this.rnd = new Random();
 }
 /// <summary>
 /// Generates a monic polynomial of given degree over given field F.
 /// </summary>
 public static Polynomial RandomMonic(FiniteField F, int degree)
 {
     Random rnd = new Random();
     int[] coefs = new int[degree + 1];
     for (int i = 0; i < coefs.Length - 1; i++)
         coefs[i] = rnd.Next(F.Elements[0].Value, F.Elements[F.Elements.Length - 1].Value + 1);
     coefs[coefs.Length - 1] = 1;
     Polynomial p = new Polynomial(F, coefs);
     return p;
 }
        /// <summary>
        /// If the characteristic of the finite field is less or equal then 7 you can't use seperators.
        /// Example; For char=5 you should write string as "11232340134324320"
        /// For char=11 you should write string as "1-10-0-8-2-1-3-10-9-2"
        /// You can use . , ; _ - and space char as seperator. 
        /// </summary>
        /// <param name="F"></param>
        /// <param name="s"></param>
        /// <returns></returns>
        public static Polynomial Parse(FiniteField F, string s, bool trimZeros)
        {
            FiniteFieldElement[] list = new FiniteFieldElement[0];

            if (F.Characteristic > 7)
            {
                string[] slist = s.Split('.', ',', ';', '_', '-', ' ');

                for (int i = 0; i < slist.Length; i++)
                {
                    FiniteFieldElement f = new FiniteFieldElement();
                    f.Field = F;
                    f.Value = int.Parse(slist[i].ToString()) % F.Characteristic;

                    Array.Resize(ref list, list.Length + 1);
                    list[list.Length - 1] = f;
                }

            }
            else
            {
                for (int i = 0; i < s.Length; i++)
                {
                    FiniteFieldElement f = new FiniteFieldElement();
                    f.Field = F;
                    f.Value = int.Parse(s[i].ToString()) % F.Characteristic;

                    Array.Resize(ref list, list.Length + 1);
                    list[list.Length - 1] = f;
                }
            }

            // Trim 0s
            if (trimZeros)
            {
                int listlen = list.Length;
                for (int i = 0; i < listlen - 1; i++)
                {
                    if (list[listlen - i - 1].Value == 0)
                        Array.Resize(ref list, list.Length - 1);
                    else
                        break;
                }
            }

            return new Polynomial(list);
        }