\documentclass[12pt,a4paper]{article}
\usepackage[spanish]{babel}

\title{Cyclic Redundancy Check}
\author{Nicolás A. Ortega}

\begin{document}
\maketitle
La CRC es un código usado para detectar errores que se suele usar en redes
digitales y dispositivos de almacenamiento. Funciona cogiendo el resto de una
división polinómica. De esta manera, los cálculos se repiten y si la prueba no
concuerda con los anteriores, se hacen correcciones para prevenir corrupción de
datos.

Es muy popular ya que es simple de implementar en hardware binario y bastante
bueno en la detección de errores comunes causadas por ruido.

La CRC-32 es un variante del CRC que guarda el código CRC en un variable de 32
bits. En C se implementaría de la manera siguiente:

\begin{verbatim}
#include <inttypes.h>

uint32_t CRC32(const uint8_t data[], size_t data_length)
{
  uint32_t crc32 = 0xFFFFFFFFu;

  for (size_t i = 0; i < data_length; i++)
  {
    const uint32_t lookupIndex = (crc32 ^ data[i]) & 0xff;
    crc32 = (crc32 >> 8) ^ CRCTable[lookupIndex];
  }

  crc32 ^= 0xFFFFFFFFu;
  return crc32;
}
\end{verbatim}

\end{document}
