From 5d5982557e3f15c5eaff054addfcc0393d9d43f2 Mon Sep 17 00:00:00 2001 From: dev Date: Mon, 5 Oct 2026 23:44:28 +0200 Subject: [PATCH] Stage 5 of Dart: 5a reviewed and integrated over 5b, 5c running Co-Authored-By: Claude Opus 5.5 --- HANDOFF.md | 9 ++++----- PLAN_dart.md | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/HANDOFF.md b/HANDOFF.md index 0a5451f..96acf86 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -25,12 +25,11 @@ Las revisiones de las dos etapas están en [PLAN_dart.md](PLAN_dart.md), al fina La etapa 4 está completa: 4a, 4b y 4c hechas, revisadas e integradas en `v0.11`, hasta `8e0e993`. La salida `-dart` del generador de tablas está en `c531e93` de `datekeys-go`, subido. - La etapa 5 se reparte en 5a, 5b y 5c, descritas en [PLAN_dart.md](PLAN_dart.md), al final. La 5a trabaja en el worktree `datekeys-dart-stage5a`, rama `stage5a`, y la 5b en la copia principal. Si la sesión se cierra a medias: - 1. mira qué commits hay en `v0.11` después de `8e0e993` y en `stage5a`; + La etapa 5 se reparte en 5a, 5b y 5c, descritas en [PLAN_dart.md](PLAN_dart.md), al final. La 5a y la 5b ya están hechas, revisadas e integradas en `v0.11`, hasta `6ba6893`. Con la 5b, `testdata` pasó a `c531e93`, el borrador v0.12. La 5c corre en la copia principal. Si la sesión se cierra a medias: + 1. mira qué commits hay en `v0.11` después de `6ba6893`; 2. revísalos; - 3. integra `stage5a` encima de `v0.11` y pasa el gate; - 4. borra el worktree; - 5. lanza la 5c. + 3. pasa el gate; + 4. si quedó a medias, relanza la 5c con el esquema de [PLAN_dart.md](PLAN_dart.md). 2. Lo que sigue abierto de la lista de abajo: - la aprobación del borrador v0.12 y la medida del área de 32 KiB, que el autor dejó para luego; - el TypeScript sin urgencia; diff --git a/PLAN_dart.md b/PLAN_dart.md index fc7a9f4..b0d2d7f 100644 --- a/PLAN_dart.md +++ b/PLAN_dart.md @@ -203,3 +203,20 @@ Qué hizo: - **Pruebas:** 23 de los 24 casos de `security.json` coinciden con Go; el que falta es de la 5c. Un diferencial de 1 730 evaluaciones de Go coincide también, y las pruebas detectaron los 12 fallos inyectados. La revisión de la sesión comparó con Go los compromisos, byte a byte, y `EvaluateSecurityIn`, `evaluateSignature` y `setSeal`. Coinciden también en que un pánico o un fallo de una parte solo afecta a su propio veredicto. No encontró fallos. + +**La 5a, hecha, revisada e integrada encima de la 5b el 5-10:** `68eb96e` a `6ba6893`. El gate pasa con 1 422 pruebas en la VM y 322 en Node. El worktree y la rama `stage5a` están borrados. + +Qué hizo: `cms.dart`, el port de `internal/cms` con el perfil de certificado de la v0.12, sobre `nist_curves.dart`, `ecdsa.dart` (P-256, P-384 y P-521, porque Go la acepta) y `rsa.dart` (PKCS#1 v1.5 y PSS, de 2048 a 4096 bits). +- **Vectores:** salen de Go como una prueba de Go en una exportación, porque Go 1.26 no deja fijar el azar de las firmas fuera de un binario de pruebas. +- **Pruebas:** detectaron los 8 fallos inyectados en la VM. + +La revisión de la sesión comparó con la librería criptográfica de Go: +- ECDSA, con r y s de 1 a n − 1, s alta aceptada, el hash recortado a los bits del orden y la lectura `cryptobyte` de la firma; +- RSA, con la codificación PKCS#1 v1.5 completa, PSS con la sal igual al hash y la comprobación de longitudes; +- los límites de las claves RSA de `internal/cms`. + +El resto del lector lo cubren los vectores de Go. + +Una observación sin decisión: según el agente, `cms.ParseCert` de Go no comprueba que el certificado sea DER y el de TypeScript sí. Puede ser otra diferencia de paridad entre los dos, si llega a darse dentro de una firma. + +**La 5c corre desde el 5-10** en la copia principal, sobre `6ba6893`: `securitycms.dart`, que pone `alg` 2 y `seal_type` 2 en los veredictos.