Expansión del mensaje
Expande dieciséis palabras iniciales a las sesenta y cuatro palabras de cada bloque.
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.
Expansión del Horario de Mensaje (Message Schedule: y )
A partir de las 16 palabras iniciales (), SHA-256 expande el bloque hasta generar 64 palabras () utilizando funciones de rotación y desplazamiento de bits.
Modelo mental: La fórmula de expansión de SHA-256
Para cualquier índice :
Donde las funciones auxiliares se definen con rotaciones hacia la derecha (ROTR) y desplazamientos lógicos (SHR):
-
Todas las sumas son módulo (usando
(a + b) >>> 0).
Tu objetivo en esta etapa
Leer por stdin un JSON con op: "schedule-word", la lista de palabras anteriores words y el index a calcular (). Devolver el valor de la palabra calculada en word.
Formato de Entrada
{
"op": "schedule-word",
"words": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24],
"index": 16
}
Formato de Salida
{
"word": 0
}
Qué debes hacer paso a paso
- Implementa ROTR y SHR para 32 bits:
ROTR(x, n) = ((x >>> n) | (x << (32 - n))) >>> 0SHR(x, n) = (x >>> n)
- Implementa y :
s0(x) = (ROTR(x, 7) ^ ROTR(x, 18) ^ SHR(x, 3)) >>> 0s1(x) = (ROTR(x, 17) ^ ROTR(x, 19) ^ SHR(x, 10)) >>> 0
- Calcula :
- Toma de
words. - Suma:
(s1(w_im2) + w_im7 + s0(w_im15) + w_im16) >>> 0.
- Toma de
- Emite la salida: Escribe
{"word": resultado}en stdout.
Criterios de aceptación
- ✅ Implementa con exactitud las funciones y .
- ✅ Realiza aritmética módulo .
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.