public static bool IsCrcValid(BinaryPolynomial polynomialForCheck)
        {
            var polynomial     = polynomialForCheck.Copy();
            var divisionResult = BinaryPolynomial.Division(polynomial, GeneratorPolynomial);

            return(divisionResult.Item2.IsNullPolynomial);
        }
        public static BinaryPolynomial GenerateCrc(BinaryPolynomial polynomial)
        {
            var polynomialWithPaddingShift = polynomial.Copy().RiseDegree(Padding);
            var divisionResult             = BinaryPolynomial.Division(polynomialWithPaddingShift, GeneratorPolynomial);

            return(polynomialWithPaddingShift + divisionResult.Item2);
        }
示例#3
0
        public byte Multiply(byte firstNumber, byte secondNumber)
        {
            BinaryPolynomial firstNumberPolynomial  = firstNumber;
            BinaryPolynomial secondNumberPolynomial = secondNumber;

            var multiplicationResult   = firstNumberPolynomial * secondNumberPolynomial;
            var multiplicationByModule = multiplicationResult % IrreduciblePolynomial;

            return(multiplicationByModule);
        }
        public void DivisionShouldWorkCorrect(uint originalNumber, uint originalDivision,
                                              uint expectedResult)
        {
            //arrange
            BinaryPolynomial number   = originalNumber;
            BinaryPolynomial division = originalDivision;
            //act
            var actualResult = number / division;

            //assert
            Assert.Equal(expectedResult, actualResult.Value);
        }
示例#5
0
        public byte Divide(byte firstNumber, byte secondNumber)
        {
            BinaryPolynomial firstNumberPolynomial         = firstNumber;
            BinaryPolynomial secondNumberPolynomial        = secondNumber;
            BinaryPolynomial secondNumberPolynomialInverse =
                MultiplicativeInverseUsingExponentiation(secondNumberPolynomial);

            var multiplicationResult   = firstNumberPolynomial * secondNumberPolynomialInverse;
            var multiplicationByModule = multiplicationResult % IrreduciblePolynomial;

            return(multiplicationByModule);
        }
        public void MultiplicationShouldWorkCorrect(uint originalFirstNumber, uint originalSecondNumber,
                                                    uint expectedResult, string expectedPolynomial)
        {
            //arrange
            BinaryPolynomial firstNumber  = originalFirstNumber;
            BinaryPolynomial secondNumber = originalSecondNumber;
            //act
            var actualResult = firstNumber * secondNumber;

            //assert
            Assert.Equal(expectedResult, actualResult.Value);
            Assert.Equal(expectedPolynomial, actualResult.ToString());
        }