qr-pure - v2.1.0
    Preparing search index...

    Class GaloisField

    Clase estática para aritmética de campos de Galois GF(2^8).

    El campo GF(2^8) se usa para los cálculos de Reed-Solomon en códigos QR. Utiliza el polinomio primitivo x^8 + x^4 + x^3 + x^2 + 1.

    En este campo:

    • La suma es XOR
    • La multiplicación usa tablas de logaritmos
    • Hay 256 elementos (0-255)
    // Multiplicación en GF(2^8)
    const result = GaloisField.multiply(17, 42); // 198

    // Potencia
    const power = GaloisField.power(2, 8); // 29 (overflow)
    Index

    Constructors

    Methods

    • Suma dos valores en GF(2^8).

      Parameters

      • a: number

        Primer operando

      • b: number

        Segundo operando

      Returns number

      a XOR b

      En campos de característica 2, la suma es XOR. Nota: En GF(2^8), a + a = 0, por lo que resta = suma.

      GaloisField.add(5, 3);   // 6 (0101 XOR 0011 = 0110)
      GaloisField.add(10, 10); // 0 (a + a = 0)
    • Obtiene el antilogaritmo (exponenciación de α).

      Parameters

      • exponent: number

        Exponente (puede ser >= 255, se normaliza)

      Returns number

      α^exponent en GF(2^8)

      Calcula α^exponent en GF(2^8). El resultado se normaliza al rango [0, 254] usando módulo 255.

      GaloisField.antilog(0);  // 1 (α^0 = 1)
      GaloisField.antilog(1); // 2 (α^1 = 2)
      GaloisField.antilog(8); // 29 (α^8 = 29 con el polinomio primitivo)
      GaloisField.antilog(255); // 1 (α^255 = α^0 = 1)
    • Divide dos valores en GF(2^8).

      Parameters

      • a: number

        Dividendo

      • b: number

        Divisor

      Returns number

      Cociente en GF(2^8)

      Usa la identidad: a / b = antilog(log(a) - log(b)).

      GaloisField.divide(8, 4);  // 2
      GaloisField.divide(6, 2); // 3

      Si b es 0 (división por cero)

    • Calcula el inverso multiplicativo en GF(2^8).

      Parameters

      • a: number

        Valor a invertir

      Returns number

      Inverso multiplicativo

      Encuentra x tal que a * x = 1. Usa la identidad: a^(-1) = antilog(255 - log(a)).

      const inv = GaloisField.inverse(2);
      GaloisField.multiply(2, inv); // 1

      Si a es 0 (no tiene inverso)

    • Obtiene el logaritmo en base α.

      Parameters

      • value: number

        Valor en GF(2^8) (1-255, 0 es caso especial)

      Returns number

      Logaritmo en base α

      Encuentra i tal que α^i = value en GF(2^8).

      GaloisField.log(1);  // 0 (α^0 = 1)
      GaloisField.log(2); // 1 (α^1 = 2)
      GaloisField.log(29); // 8 (α^8 = 29)

      Si value es 0 (log(0) indefinido)

    • Multiplica dos valores en GF(2^8).

      Parameters

      • a: number

        Primer factor

      • b: number

        Segundo factor

      Returns number

      Producto en GF(2^8)

      Usa la identidad: a * b = antilog(log(a) + log(b)). Caso especial: Si alguno es 0, el resultado es 0.

      GaloisField.multiply(2, 4);  // 8
      GaloisField.multiply(128, 2); // 29 (overflow)
      GaloisField.multiply(17, 0); // 0
    • Calcula la potencia en GF(2^8).

      Parameters

      • base: number

        Base

      • exponent: number

        Exponente (entero no negativo)

      Returns number

      base^exponent en GF(2^8)

      Calcula base^exponent en GF(2^8).

      GaloisField.power(2, 8);  // 29
      GaloisField.power(3, 0); // 1
      GaloisField.power(0, 5); // 0
    • Resta dos valores en GF(2^8).

      Parameters

      • a: number

        Minuendo

      • b: number

        Sustraendo

      Returns number

      a XOR b

      En GF(2^8), resta es igual a suma (XOR).

      GaloisField.subtract(5, 3); // 6 (igual que add)