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.
6.6 KiB
6.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.2.0 — sin publicar
Fase 3: la escritura de cápsulas de formato 2, según PLAN_fase3_escritura.md (v3, en ../docs). En curso.
Pasos 3 y 4: el writer
encrypt.tsywriter.ts:encrypt(src, opts)escribe un.dkcde formato 2 y, si se pide, una.dkkportable, comocapsule.Encrypt: L conocida de antemano, rellenoreforzadopor defecto, de 1 a 16 credenciales con señuelos en un orden uniforme,SEALED_CONTROL_LENcon la fórmula del §62.1 y las autocomprobaciones de la regla 11 y dos más. Streaming desdeUint8Array,BloboReadableStream, hacia memoria o hacia unWritableStreamque solo se cierra con la cápsula completa y comprobada.- Reproduce byte a byte las secciones deterministas de los siete fixtures de formato 2 de Go, y todo lo que escribe se abre con
open. - Tests de streaming, de errores internos con
age-encryptionsustituido y un bucle de propiedades (50 semillas en cada ejecución; 500 pasaron a mano).
Paso 2: piezas de apoyo
recipient.ts: recipientsage1…comoage1.3.2, las reglas de §37 con los textos deagewrap.CheckX25519Recipienty la lista de recipients de una persona, con errores por número de línea. Sin noble.random.ts: el índice sin sesgo y la permutación de Fisher–Yates del orden de los 16 huecos, con la prueba de uniformidad de Go.agefile.ts: los ficherosageenteros que antes eran privados de la apertura, para compartirlos con el writer.x25519.ts:newX25519Identityyx25519PublicKey, con los vectores de RFC 7748.digest.ts:sha256Hasher.datekey.ts:compareInstants, que usaopen.ts, eisInstant.tempfile.ts: la zona de la apertura y la de crear (OPEN_AREA,CREATE_AREA), con su limpieza por separado.- Guardas: solo
agefile.ts,open.ts,tlock.ts,writer.tsy los tests importanage-encryption; soloencrypt.tsytesting/importanwriter.ts;index.tsno reexporta la apertura ni el writer.
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); otroVERSIONesERR_UNSUPPORTED_VERSIONen el paso 2.DKC_FRAMING_VERSIONdesaparece:FORMAT_1,FORMAT_2eisFormat. CONTROL_CBORse lee y se escribe para un formato,decodeControl(b, format)yencodeControl(c, format): su versión de schema es la del formato, y en el formato 2 llevapayload_length(8 bytes, hasta L_MAX) ypadding(claves 6 y 7).padding.ts: las reglasbloque256yreforzadode §29.1, exactas hasta L_MAX = 2⁵³ − 2⁴⁶, y la longitud dePAYLOAD_AGE.open: exactamente 16 stanzas enINNER_ACCESS_AGEdel 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.Openeddaformat,payloadLengthy, en el formato 2,paddingypaddedLength.- La vista JSON de
inspectllevaformat, comodatekeys 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.
testdatasincronizado conspec-v0.9: doce fixtures, siete de ellos del formato 2,padding.json, 125 casos de mutación y 4 380 del diferencial.ibe-vectors.jsonañ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_CBORy.dkk. - Tramas DKC1 y DKK1, cabeceras
agey 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-encryption0.3.1,@noble/curvesy@noble/hashes2.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 deagewrapse apoyan enx25519.ts, que abre cada stanza X25519 por separado, y enbech32.ts. Los 65 casos del corpus de mutaciones pasan poropencon el código y el paso de Go, y los cinco fixtures oficiales se abren a su texto en claro; @noble/ciphers2.4.0 como dependencia directa, aprobada el 28-09-2026: la copia que ya traeage-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 descifraPAYLOAD_AGEen streaming. La salida puede ser unWritableStream, 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 elRecipientdeOUTER_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 contlock.TimeUnlocky el ficheroageconagewrap.NewTimeIdentity; - la acción "abrir" de
/inspect(paso 8), cuyo código, con noble yage-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_keyson una.dkko identidadesAGE-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;
readAccessKeyenprefix.ts.
- dependencias de ejecución (
VERSIONySPEC_VERSION, también en el pie de la página.licenses.txten el sitio, con los avisos detlock-jsyagey los de cada paquete del bundle.