Ejemplo n.º 1
0
Archivo: ECC.cs Proyecto: gxk/dm6467
        public BinaryGaloisFieldElement Modulo(BinaryGaloisFieldElement x, BinaryGaloisFieldElement y)
        {
            Int32 ordX, ordY;

            ordX = BinaryGaloisFieldElement.Order(x);
            ordY = BinaryGaloisFieldElement.Order(y);

            // if x is already of lower order than y, abort
            if (BinaryGaloisFieldElement.Order(x) < BinaryGaloisFieldElement.Order(y))
            {
                return(x);
            }

            // Keep subtracting mod value until we are in a valid range
            // Perform long division
            while (ordX >= ordY)
            {
                if ((x.Value & (0x1 << ordX)) != 0)
                {
                    x -= (y << (ordX - ordY));
                }
                ordX--;
            }
            return(x);
        }
Ejemplo n.º 2
0
Archivo: ECC.cs Proyecto: gxk/dm6467
        public BinaryGaloisFieldElement Divide(BinaryGaloisFieldElement x, BinaryGaloisFieldElement y)
        {
            Int32 result = 0x0;
            Int32 ordX, ordY;

            ordX = BinaryGaloisFieldElement.Order(x);
            ordY = BinaryGaloisFieldElement.Order(y);

            // if x is already of lower order than y, abort
            if (ordX < ordY)
            {
                return((BinaryGaloisFieldElement)0);
            }

            // Perform long division
            while (ordX >= ordY)
            {
                if ((x.Value & (0x1 << ordX)) != 0)
                {
                    result = 0x1 << (ordX - ordY);
                    x     -= (y << (ordX - ordY));
                }
                ordX--;
            }

            return((BinaryGaloisFieldElement)result);
        }