Example #1
0
        public ExtensionLFSR(ExtensionPolynomial feedbackPolynomial, ExtensionFieldElement[] initialState)
        {
            if (feedbackPolynomial.Field.Characteristic != initialState[0].Field.Characteristic)
                throw new Exception("Both values should be defined in the same field.");
            if ((initialState.Length - 1) < feedbackPolynomial.Degree)
                throw new ArgumentOutOfRangeException("Initial state size must be greater then feedback polynomial degree.");

            this.currentState = initialState;
            this._feedbackPolynomial = feedbackPolynomial;
        }
Example #2
0
 public void Clock()
 {
     ExtensionFieldElement r = ExtensionFieldElement.Zero(_feedbackPolynomial.Field);
     // Evaluate the current state on feedback polynomial
     for (int i = 0; i < currentState.Length; i++)
         r += _feedbackPolynomial.Coefficients[i] * currentState[i];
     // Shift the currentState right.
     _streamOutput = currentState[0];
     Array.Copy(currentState, 1, currentState, 0, currentState.Length - 1);
     currentState[currentState.Length - 1] = r;
 }
Example #3
0
        public void Clock()
        {
            ExtensionFieldElement r = ExtensionFieldElement.Zero(_feedbackPolynomial.Field);

            // Evaluate the current state on feedback polynomial
            for (int i = 0; i < currentState.Length; i++)
            {
                r += _feedbackPolynomial.Coefficients[i] * currentState[i];
            }
            // Shift the currentState right.
            _streamOutput = currentState[0];
            Array.Copy(currentState, 1, currentState, 0, currentState.Length - 1);
            currentState[currentState.Length - 1] = r;
        }
Example #4
0
        public static ExtensionFieldElement operator *(ExtensionFieldElement element1, ExtensionFieldElement element2)
        {
            if (element1.Field != element2.Field)
            {
                throw new Exception("Both elements should be in the same field.");
            }

            ExtensionFieldElement result = new ExtensionFieldElement();

            result.Field = element1.Field;
            result.Value = (element1.Value * element2.Value) % element1.Field.DefiningPolynomial;

            return(result);
        }
Example #5
0
        public static ExtensionFieldElement operator %(ExtensionFieldElement element1, ExtensionFieldElement element2)
        {
            if (element1.Field != element2.Field)
            {
                throw new Exception("Both elements should be in the same field.");
            }

            ExtensionFieldElement result = new ExtensionFieldElement();

            result.Field = element1.Field;
            result.Value = (element1.Value % element2.Value) % element1.Field.DefiningPolynomial;

            return(result);

            //throw new NotImplementedException("There was a problem about element operation handling.");
        }
Example #6
0
        public ExtensionFieldElement RandomPrimitiveElement(int degree)
        {
            if (degree > this._primitivePolynomial.Degree - 1)
            {
                throw new Exception("Element's degree can't be equal to or higher than Primitive polynomial's degree.");
            }

            Polynomial p = Polynomial.Random(this._baseField, degree, this.rnd);

            while (!p.IsPrimitiveElement(this._primitivePolynomial))
            {
                p = Polynomial.Random(this._baseField, degree, this.rnd);
            }
            ExtensionFieldElement elt = new ExtensionFieldElement(this, p);

            return(elt);
        }
Example #7
0
        public static ExtensionPolynomial operator *(ExtensionPolynomial poly1, ExtensionPolynomial poly2)
        {
            if (poly1.Field.Characteristic != poly2.Field.Characteristic)
            {
                throw new Exception("Both polynomials should be defined in the same field.");
            }

            ExtensionFieldElement[] elts = new ExtensionFieldElement[poly1.Degree + poly2.Degree + 1];

            for (int i = 0; i < elts.Length; i++)
            {
                ExtensionFieldElement e = ExtensionFieldElement.One(poly1.Field);
                elts[i] = e;
            }

            ExtensionPolynomial p = new ExtensionPolynomial(elts);

            for (int i = 0; i < poly1._coefficients.Length; i++)
            {
                for (int j = 0; j < poly2._coefficients.Length; j++)
                {
                    p._coefficients[i + j] += poly1._coefficients[i] * poly2._coefficients[j];
                }
            }

            int plen = p._coefficients.Length;

            for (int i = 0; i < plen - 1; i++)
            {
                if (p._coefficients[plen - i - 1].Value.IsZero)
                {
                    Array.Resize(ref p._coefficients, p._coefficients.Length - 1);
                }
                else
                {
                    break;
                }
            }

            return(p);
        }
Example #8
0
        public static ExtensionFieldElement Zero(ExtensionField F)
        {
            ExtensionFieldElement zero = new ExtensionFieldElement(F, new Polynomial(F.DefiningPolynomial.Field, 0));

            return(zero);
        }
        public static ExtensionFieldElement operator /(ExtensionFieldElement element1, ExtensionFieldElement element2)
        {
            if (element1.Field != element2.Field)
            {
                throw new Exception("Both elements should be in the same field.");
            }

            ExtensionFieldElement result = new ExtensionFieldElement();
            result.Field = element1.Field;
            result.Value = (element1.Value / element2.Value) % element1.Field.DefiningPolynomial;

            return result;

            //throw new NotImplementedException("There was a problem about element operation handling.");
        }
Example #10
0
        public ExtensionFieldElement One()
        {
            ExtensionFieldElement one = new ExtensionFieldElement(this.Field, new Polynomial(this.Field.DefiningPolynomial.Field, 1));

            return(one);
        }
Example #11
0
        private void btnLFSR_Click(object sender, EventArgs e)
        {
            if (lfsr == null)
            {
                ExtensionFieldElement[] eltlist1 = new ExtensionFieldElement[4];

                for (int i = 0; i < 4; i++)
                    eltlist1[i] = ExtF.RandomElement;

                ExtensionPolynomial extp1 = new ExtensionPolynomial(eltlist1);

                ExtensionFieldElement[] eltlist2 = new ExtensionFieldElement[4];

                for (int i = 0; i < 4; i++)
                    eltlist2[i] = ExtF.RandomElement;

                lfsr = new ExtensionLFSR(extp1, eltlist2);

                txtInfo.Clear();
                txtInfo.AppendText("LFSR has been created.\r\n");
                txtInfo.AppendText("Feedback Polynomial:\r\n" + lfsr.FeedbackPolynomial.ToString() + "\r\n");
                txtInfo.AppendText("Initial State:\r\n");
                for (int i = 0; i < lfsr.currentState.Length; i++)
                    txtInfo.AppendText("c_" + i + " = " + lfsr.currentState[i].ToString() + "\r\n");

                btnLFSR.Text = "Clock the LFSR";

                return;
            }

            // clock time

            lfsr.Clock();
            txtInfo.AppendText("\r\nOutput " + s++ + " : " + lfsr.StreamOutput + "\r\n");
            txtInfo.AppendText("Current State:\r\n");
            for (int i = 0; i < lfsr.currentState.Length; i++)
                txtInfo.AppendText("c_" + i + " = " + lfsr.currentState[i].ToString() + "\r\n");
        }
 public static ExtensionFieldElement One(ExtensionField F)
 {
     ExtensionFieldElement one = new ExtensionFieldElement(F, new Polynomial(F.DefiningPolynomial.Field, 1));
     return one;
 }
        public ExtensionFieldElement RandomPrimitiveElement(int degree)
        {
            if (degree > this._primitivePolynomial.Degree - 1)
            {
                throw new Exception("Element's degree can't be equal to or higher than Primitive polynomial's degree.");
            }

            Polynomial p = Polynomial.Random(this._baseField, degree, this.rnd);
            while (!p.IsPrimitiveElement(this._primitivePolynomial))
            {
                p = Polynomial.Random(this._baseField, degree, this.rnd);
            }
            ExtensionFieldElement elt = new ExtensionFieldElement(this, p);
            return elt;
        }
        public static ExtensionPolynomial operator *(ExtensionPolynomial poly1, ExtensionPolynomial poly2)
        {
            if (poly1.Field.Characteristic != poly2.Field.Characteristic)
            {
                throw new Exception("Both polynomials should be defined in the same field.");
            }

            ExtensionFieldElement[] elts = new ExtensionFieldElement[poly1.Degree + poly2.Degree + 1];

            for (int i = 0; i < elts.Length; i++)
            {
                ExtensionFieldElement e = ExtensionFieldElement.One(poly1.Field);
                elts[i] = e;
            }

            ExtensionPolynomial p = new ExtensionPolynomial(elts);

            for (int i = 0; i < poly1._coefficients.Length; i++)
            {
                for (int j = 0; j < poly2._coefficients.Length; j++)
                    p._coefficients[i + j] += poly1._coefficients[i] * poly2._coefficients[j];
            }

            int plen = p._coefficients.Length;
            for (int i = 0; i < plen - 1; i++)
            {
                if (p._coefficients[plen - i - 1].Value.IsZero)
                    Array.Resize(ref p._coefficients, p._coefficients.Length - 1);
                else
                    break;
            }

            return p;
        }
 public ExtensionFieldElement Zero()
 {
     ExtensionFieldElement zero = new ExtensionFieldElement(this.Field, new Polynomial(this.Field.DefiningPolynomial.Field, 0));
     return zero;
 }
 public ExtensionFieldElement One()
 {
     ExtensionFieldElement one = new ExtensionFieldElement(this.Field, new Polynomial(this.Field.DefiningPolynomial.Field, 1));
     return one;
 }
 public static ExtensionFieldElement Zero(ExtensionField F)
 {
     ExtensionFieldElement zero = new ExtensionFieldElement(F, new Polynomial(F.DefiningPolynomial.Field, 0));
     return zero;
 }
Example #18
0
        private void btnExtPolyAdd_Click(object sender, EventArgs e)
        {
            ExtensionFieldElement[] eltlist1 = new ExtensionFieldElement[7];

            for (int i = 0; i < 7; i++)
                eltlist1[i] = ExtF.RandomElement;

            ExtensionPolynomial extp1 = new ExtensionPolynomial(eltlist1);

            ExtensionFieldElement[] eltlist2 = new ExtensionFieldElement[4];

            for (int i = 0; i < 4; i++)
                eltlist2[i] = ExtF.RandomElement;

            ExtensionPolynomial extp2 = new ExtensionPolynomial(eltlist2);

            ExtensionPolynomial result = extp1 + extp2;

            txtInfo.Clear();
            txtInfo.AppendText("Random Extension Polynomial 1\r\n" + extp1.ToString() + "\r\n");
            txtInfo.AppendText("\r\nRandom Extension Polynomial 2\r\n" + extp2.ToString() + "\r\n");
            txtInfo.AppendText("\r\nPolynomial 1 + Polynomial 2\r\n" + result.ToString() + "\r\n");
        }
Example #19
0
        public ExtensionFieldElement Zero()
        {
            ExtensionFieldElement zero = new ExtensionFieldElement(this.Field, new Polynomial(this.Field.DefiningPolynomial.Field, 0));

            return(zero);
        }
Example #20
0
        public static ExtensionFieldElement One(ExtensionField F)
        {
            ExtensionFieldElement one = new ExtensionFieldElement(F, new Polynomial(F.DefiningPolynomial.Field, 1));

            return(one);
        }
        public static ExtensionFieldElement operator -(ExtensionFieldElement element1, ExtensionFieldElement element2)
        {
            if (element1.Field != element2.Field)
            {
                throw new Exception("Both elements should be in the same field.");
            }

            ExtensionFieldElement result = new ExtensionFieldElement();
            result.Field = element1.Field;
            result.Value = (element1.Value - element2.Value) % element1.Field.DefiningPolynomial;

            return result;
        }