Construye tus propias funciones SHA-256 y HMAC
Etapa 2 de 7v2 · 47c2c36d

Bloques y palabras

Divide el mensaje preparado en bloques y lee palabras de 32 bits big-endian.

Constrúyelo en tu lenguaje

El tester trata tu programa como una caja negra: sirve cualquier lenguaje. Estos son los más cómodos para este proyecto.

Descomposición en Palabras de 32 bits (Message Words)

SHA-256 opera sobre palabras de 32 bits sin signo en orden big-endian. Cada bloque de 64 bytes se divide en 16 palabras de 32 bits (W0,W1,…,W15W_0, W_1, \dots, W_{15}).

Modelo mental: 4 bytes por palabra de 32 bits

Cada palabra de 32 bits está compuesta por 4 bytes (8 caracteres hexadecimales): "0000000100000002":

  • Palabra 0: "00000001" -> 0x00000001 = 1
  • Palabra 1: "00000002" -> 0x00000002 = 2

Tu objetivo en esta etapa

Leer por stdin un JSON con op: "words" y una cadena hex. Descomponer la cadena en palabras de 32 bits sin signo en el arreglo words.

Formato de Entrada

json
{
  "op": "words",
  "hex": "0000000100000002"
}

Formato de Salida

json
{
  "words": [1, 2]
}

Qué debes hacer paso a paso

  1. Valida la longitud: La longitud de hex debe ser múltiplo de 8 (4 bytes por palabra). Si no, sal con código 1 y error en stderr.
  2. Parsea bloques de 8 caracteres:
    • Itera en saltos de 8 caracteres (i = 0, 8, 16, ...).
    • Extrae hex.slice(i, i + 8).
    • Parsea como entero sin signo de 32 bits (parseInt(slice, 16) >>> 0).
    • Agrégalo a words.
  3. Emite la salida: Escribe {"words": words} en stdout.

Criterios de aceptación

  • ✅ Descompone cadenas hex en enteros de 32 bits big-endian sin signo.
  • ✅ Maneja enteros que superan 0x7FFFFFFF manteniéndolos como positivos sin signo.

Formato de salida y errores

Los ejemplos multilínea se muestran así para facilitar la lectura. Emite JSON compacto, sin espacios opcionales, con las propiedades en el orden de los ejemplos de salida y un salto de línea final. No escribas logs en stdout. Las pruebas comparan texto exacto. Para entradas inválidas, usa stderr con la palabra error, stdout vacío y código 1. Para entradas válidas, código 0. Usa números JSON enteros cuando el resultado sea entero.