diff --git a/1/ISO/assignments/crc-32/crc-32.pdf b/1/ISO/assignments/crc-32/crc-32.pdf new file mode 100644 index 0000000..41025df Binary files /dev/null and b/1/ISO/assignments/crc-32/crc-32.pdf differ diff --git a/1/ISO/assignments/crc-32/crc-32.tex b/1/ISO/assignments/crc-32/crc-32.tex new file mode 100644 index 0000000..4244a87 --- /dev/null +++ b/1/ISO/assignments/crc-32/crc-32.tex @@ -0,0 +1,39 @@ +\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 + +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}