You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DateKeys-App/CHANGELOG.md

4.6 KiB

Changelog

Cambios notables de la librería TypeScript y de la página. El proyecto usa versionado semántico; mientras sea 0.x, no hay promesa de estabilidad. La sección «Versiones» del README explica qué cubre cada número.

0.1.0 — 29 de septiembre de 2026

Implementa la especificación DateKeys 0.9 (tag spec-v0.9 de datekeys-go) para el perfil Quicknet, y pasa todos los vectores y fixtures compartidos de datekeys-go en 7e2d83c. Hasta el 29-09-2026 implementaba la 0.8.2 (9ac9cd9).

Especificación 0.9: el formato 2

  • El prelude lee el formato de la cápsula, 1 o 2 (Prelude.format); otro VERSION es ERR_UNSUPPORTED_VERSION en el paso 2. DKC_FRAMING_VERSION desaparece: FORMAT_1, FORMAT_2 e isFormat.
  • CONTROL_CBOR se lee y se escribe para un formato, decodeControl(b, format) y encodeControl(c, format): su versión de schema es la del formato, y en el formato 2 lleva payload_length (8 bytes, hasta L_MAX) y padding (claves 6 y 7).
  • padding.ts: las reglas bloque256 y reforzado de §29.1, exactas hasta L_MAX = 2⁵³ − 2⁴⁶, y la longitud de PAYLOAD_AGE.
  • open: exactamente 16 stanzas en INNER_ACCESS_AGE del formato 2 (paso 12, ACCESS_SLOTS), P en el paso 16, y en el 17 un texto en claro de P bytes con ceros tras el contenido, del que solo se entregan los L primeros bytes, nunca el relleno. El paso 17 se registra también cuando se supera, y el 18 da los bytes de contenido, como la referencia. Opened da format, payloadLength y, en el formato 2, padding y paddedLength.
  • La vista JSON de inspect lleva format, como datekeys inspect -json.
  • La página muestra el formato de la cápsula, avisa cuando es el 1, que no oculta el número de credenciales ni la longitud exacta del contenido, y al abrir una del formato 2 da la regla de relleno y P.
  • testdata sincronizado con spec-v0.9: doce fixtures, siete de ellos del formato 2, padding.json, 125 casos de mutación y 4 380 del diferencial. ibe-vectors.json añade los siete fixtures nuevos.

Hecho

  • Codec CBOR del perfil de §58 con los textos de error de la referencia Go.
  • Schemas del Provider Profile, PUBLIC_HEADER, CONTROL_CBOR y .dkk.
  • Tramas DKC1 y DKK1, cabeceras age y DateKey (dk1_).
  • Extensiones, con los objetos y arrays de su registro.
  • La inspección de los pasos 1 a 8 de §63.
  • La página estática /inspect, sin red. Tras cada compilación se comprueban su política de seguridad y los paquetes de su bundle.
  • Fase 2:
    • dependencias de ejecución (age-encryption 0.3.1, @noble/curves y @noble/hashes 2.4.0) con sus guardas;
    • el IBE de tlock (ibe.ts) y la verificación local de releases (release.ts), contrastados con la referencia Go;
    • la apertura, pasos 9 a 18 de §63 (open.ts), con el texto en claro en memoria. Las identidades estrictas de agewrap se apoyan en x25519.ts, que abre cada stanza X25519 por separado, y en bech32.ts. Los 65 casos del corpus de mutaciones pasan por open con el código y el paso de Go, y los cinco fixtures oficiales se abren a su texto en claro;
    • @noble/ciphers 2.4.0 como dependencia directa, aprobada el 28-09-2026: la copia que ya trae age-encryption;
    • la apertura en streaming. La entrada puede ser un Blob, del que se lee solo el prefijo de los pasos 1 a 8 (prefix.ts, antes en la página) y se descifra PAYLOAD_AGE en streaming. La salida puede ser un WritableStream, que se cierra solo tras el paso 18 y se aborta ante cualquier fallo. En el navegador, con un fichero OPFS, un fallo de STREAM deja intacto su contenido anterior.
    • el cifrado del stanza tlock (encryptOnG2RFC9380) y el Recipient de OUTER_TIME_AGE (tlock.ts). Con sigma fijo, el cifrado reproduce byte a byte los vectores de Go. Además Go abre lo que cifra esta librería: el cuerpo IBE con tlock.TimeUnlock y el fichero age con agewrap.NewTimeIdentity;
    • la acción "abrir" de /inspect (paso 8), cuyo código, con noble y age-encryption, se carga bajo demanda:
      • el release lo pega quien abre (la respuesta de drand o la firma sola), o sale del registro de un fixture. La página nunca lo pide a la red y solo lee su ronda y su firma;
      • las credenciales de time_and_key son una .dkk o identidades AGE-SECRET-KEY-1…;
      • el texto en claro de un fichero propio va a un fichero temporal de OPFS que solo se confirma tras el paso 18. Se ofrece para descargar y se borra al pedirlo, con otra cápsula, al salir o en la visita siguiente;
      • readAccessKey en prefix.ts.
  • VERSION y SPEC_VERSION, también en el pie de la página.
  • licenses.txt en el sitio, con los avisos de tlock-js y age y los de cada paquete del bundle.

Powered by TurnKey Linux.