Exemplo n.º 1
0
        private Polynom XORPolynoms(Polynom messagePolynom, Polynom resPolynom)
        {
            var resultPolynom = new Polynom();
            Polynom longPoly, shortPoly;
            if (messagePolynom.PolyItems.Count >= resPolynom.PolyItems.Count)
            {
                longPoly = messagePolynom;
                shortPoly = resPolynom;
            }
            else
            {
                longPoly = resPolynom;
                shortPoly = messagePolynom;
            }

            for (var i = 0; i < longPoly.PolyItems.Count; i++)
            {
                var polItemRes = new PolynomItem
                (

                        longPoly.PolyItems[i].Coefficient ^
                        (shortPoly.PolyItems.Count > i ? shortPoly.PolyItems[i].Coefficient : 0),
                    messagePolynom.PolyItems[0].Exponent - i
                );
                resultPolynom.PolyItems.Add(polItemRes);
            }
            resultPolynom.PolyItems.RemoveAt(0);
            return resultPolynom;
        }
Exemplo n.º 2
0
        private Polynom MultiplyGeneratorPolynomByLeadterm(Polynom genPolynom, PolynomItem leadTerm, int lowerExponentBy)
        {
            var resultPolynom = new Polynom();
            foreach (var polItemBase in genPolynom.PolyItems)
            {
                var polItemRes = new PolynomItem(

                    (polItemBase.Coefficient + leadTerm.Coefficient) % 255,
                    polItemBase.Exponent - lowerExponentBy
                );
                resultPolynom.PolyItems.Add(polItemRes);
            }
            return resultPolynom;
        }
Exemplo n.º 3
0
 private Polynom MultiplyAlphaPolynoms(Polynom polynomBase, Polynom polynomMultiplier)
 {
     var resultPolynom = new Polynom();
     foreach (var polItemBase in polynomMultiplier.PolyItems)
     {
         foreach (var polItemMulti in polynomBase.PolyItems)
         {
             var polItemRes = new PolynomItem
             (
                 ShrinkAlphaExp(polItemBase.Coefficient + polItemMulti.Coefficient),
                 (polItemBase.Exponent + polItemMulti.Exponent)
             );
             resultPolynom.PolyItems.Add(polItemRes);
         }
     }
     var exponentsToGlue = resultPolynom.PolyItems.GroupBy(x => x.Exponent).Where(x => x.Count() > 1).Select(x => x.First().Exponent);
     var gluedPolynoms = new List<PolynomItem>();
     var toGlue = exponentsToGlue as IList<int> ?? exponentsToGlue.ToList();
     foreach (var exponent in toGlue)
     {
         var coefficient = resultPolynom.PolyItems.Where(x => x.Exponent == exponent).Aggregate(0, (current, polynomOld)
             => current ^ this.GetIntValFromAlphaExp(polynomOld.Coefficient));
         var polynomFixed = new PolynomItem(this.GetAlphaExpFromIntVal(coefficient), exponent);
         gluedPolynoms.Add(polynomFixed);
     }
     resultPolynom.PolyItems.RemoveAll(x => toGlue.Contains(x.Exponent));
     resultPolynom.PolyItems.AddRange(gluedPolynoms);
     resultPolynom.PolyItems = resultPolynom.PolyItems.OrderByDescending(x => x.Exponent).ToList();
     return resultPolynom;
 }
 private Polynom MultiplyAlphaPolynoms(Polynom polynomBase, Polynom polynomMultiplier)
 {
     var resultPolynom = new Polynom();
     foreach (var polItemRes in polynomMultiplier.PolyItems.SelectMany(polItemBase => polynomBase.PolyItems.Select(polItemMulti => new PolynomItem
     {
         Coefficient = ShrinkAlphaExp(polItemBase.Coefficient + polItemMulti.Coefficient),
         Exponent = (polItemBase.Exponent + polItemMulti.Exponent)
     })))
     {
         resultPolynom.PolyItems.Add(polItemRes);
     }
     var exponentsToGlue = resultPolynom.PolyItems.GroupBy(x => x.Exponent).Where(x => x.Count() > 1).Select(x => x.First().Exponent);
     var gluedPolynoms = new List<PolynomItem>();
     foreach (var exponent in exponentsToGlue)
     {
         var polynomFixed = new PolynomItem {Exponent = exponent};
         var coefficient = resultPolynom.PolyItems.Where(x => x.Exponent == exponent).Aggregate(0, (current, polynomOld) => current ^ GetIntValFromAlphaExp(polynomOld.Coefficient));
         polynomFixed.Coefficient = GetAlphaExpFromIntVal(coefficient);
         gluedPolynoms.Add(polynomFixed);
     }
     resultPolynom.PolyItems.RemoveAll(x => exponentsToGlue.Contains(x.Exponent));
     resultPolynom.PolyItems.AddRange(gluedPolynoms);
     resultPolynom.PolyItems = resultPolynom.PolyItems.OrderByDescending(x => x.Exponent).ToList();
     return resultPolynom;
 }
 private static Polynom MultiplyGeneratorPolynomByLeadterm(Polynom genPolynom, PolynomItem leadTerm, int lowerExponentBy)
 {
     var resultPolynom = new Polynom();
     foreach (var polItemRes in genPolynom.PolyItems.Select(polItemBase => new PolynomItem
     {
         Coefficient = (polItemBase.Coefficient + leadTerm.Coefficient)%255,
         Exponent = polItemBase.Exponent - lowerExponentBy
     }))
     {
         resultPolynom.PolyItems.Add(polItemRes);
     }
     return resultPolynom;
 }
Exemplo n.º 6
0
 private Polynom MultiplyAlphaPolynoms(Polynom polynomBase, Polynom polynomMultiplier)
 {
     Polynom resultPolynom = new Polynom();
     foreach (var polItemBase in polynomMultiplier.PolyItems)
     {
         foreach (var polItemMulti in polynomBase.PolyItems)
         {
             PolynomItem polItemRes = new PolynomItem();
             polItemRes.Coefficient = ShrinkAlphaExp(polItemBase.Coefficient + polItemMulti.Coefficient);
             polItemRes.Exponent = (polItemBase.Exponent + polItemMulti.Exponent);
             resultPolynom.PolyItems.Add(polItemRes);
         }
     }
     var exponentsToGlue = resultPolynom.PolyItems.GroupBy(x => x.Exponent).Where(x => x.Count() > 1).Select(x => x.First().Exponent);
     List<PolynomItem> gluedPolynoms = new List<PolynomItem>();
     foreach (var exponent in exponentsToGlue)
     {
         PolynomItem polynomFixed = new PolynomItem();
         polynomFixed.Exponent = exponent;
         int coefficient = 0;
         foreach (var polynomOld in resultPolynom.PolyItems.Where(x => x.Exponent == exponent))
         {
             coefficient ^= GetIntValFromAlphaExp(polynomOld.Coefficient);
         }
         polynomFixed.Coefficient = GetAlphaExpFromIntVal(coefficient);
         gluedPolynoms.Add(polynomFixed);
     }
     resultPolynom.PolyItems.RemoveAll(x => exponentsToGlue.Contains(x.Exponent));
     resultPolynom.PolyItems.AddRange(gluedPolynoms);
     resultPolynom.PolyItems = resultPolynom.PolyItems.OrderByDescending(x => x.Exponent).ToList();
     return resultPolynom;
 }