public void GMul_IsCommutative(byte left, byte right)
        {
            // Act
            byte r1 = GaloisMultiplication.GMul(left, right);
            byte r2 = GaloisMultiplication.GMul(right, left);


            // Assert
            Assert.AreEqual(r1, r2);
        }
        public void GMul_IsDistributive(byte x, byte y, byte z)
        {
            // Act
            byte a1 = (byte)(x ^ y);
            byte r1 = GaloisMultiplication.GMul(a1, z);

            byte m1 = GaloisMultiplication.GMul(x, z);
            byte m2 = GaloisMultiplication.GMul(y, z);
            byte r2 = (byte)(m1 ^ m2);

            // Assert
            Assert.AreEqual(r1, r2);
        }
        public void GMul_SquaringFinitFieldSize_ShouldHaveStartResult(byte value)
        {
            // Arrange
            byte r = value;

            // Act
            for (int i = 0; i < 8; i++)
            {
                r = GaloisMultiplication.GMul(r, r);
            }

            // Assert
            Assert.AreEqual(value, r);
        }