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; }
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; }
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; }
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; }