# P1-01: schemas, headers y vectores de vinculación

Dirección D01–D03 [adoptada](https://xcim.org/standardization/source/ACCEPTED-D01-D03.md) el 2026-10-19. Este paquete
concreta los [contratos locales](https://xcim.org/standardization/p1/CONTRACT.md) y mantiene las
[dependencias](https://xcim.org/standardization/p1/DEPENDENCIES.md) pendientes. No es un receiver completo ni un
programa de certificación. Las claves y direcciones son públicas y sintéticas.

## Archivos

- [schemas/](https://xcim.org/standardization/p1/): siete schemas locales cerrados; RBA, MSA, MP y sus envelopes/transporte.
- [headers.abnf](https://xcim.org/standardization/p1/headers.abnf): gramática raw de Reference/Proof, con valores case-sensitive.
- [vectors/cases.json](https://xcim.org/standardization/p1/vectors/cases.json): inputs de cada caso de binding y resultado esperado.
- [vectors/schema-cases.json](https://xcim.org/standardization/p1/vectors/schema-cases.json): positivos y negativos estructurales.
- [vectors/header-cases.json](https://xcim.org/standardization/p1/vectors/header-cases.json): sintaxis ABNF y validación de transporte por separado.
- [vectors/positive.eml](https://xcim.org/standardization/p1/vectors/positive.eml): mensaje completo de prueba, con RBA/MSA/MP y DKIM reales de fixture.
- [vectors/claims.json](https://xcim.org/standardization/p1/vectors/claims.json): payloads decodificados, preimagen privada sintética, compromisos y hex de bytes canónicos.
- [vectors/keys-TEST-ONLY.json](https://xcim.org/standardization/p1/vectors/keys-TEST-ONLY.json): seeds y claves públicas **sólo de prueba**, nunca usar en servicios reales.
- [vectors/manifest.json](https://xcim.org/standardization/p1/vectors/manifest.json): SHA-256 de archivos del conjunto; integridad, sin firma ni autoridad de release.
- [tools/check_vectors.py](https://xcim.org/standardization/p1/tools/check_vectors.py): checker Python de schemas, ABNF y binding con DKIM sin red.
- [tools/crosscheck.mjs](https://xcim.org/standardization/p1/tools/crosscheck.mjs): contraste Node de firmas, bytes y compromisos con implementación separada.
- [tools/generate_vectors.py](https://xcim.org/standardization/p1/tools/generate_vectors.py): generación determinista; `--check` verifica bytes e inventario sin sobrescribir.

## Ejecutar desde la raíz del repositorio

```powershell
.\.venv-ietf\Scripts\python.exe -m pip install -r docs/ietf/p1/requirements.txt
.\.venv-ietf\Scripts\python.exe docs/ietf/p1/tools/check_vectors.py
node docs/ietf/p1/tools/crosscheck.mjs
```

Crear `.venv-ietf` con `python -m venv .venv-ietf` si hace falta. Para regenerar
explícitamente una revisión de fixtures:

```powershell
.\.venv-ietf\Scripts\python.exe docs/ietf/p1/tools/generate_vectors.py
```

La generación toma sólo la **forma** del payload receipt de
`baseline/receipt-template.json`, cambia a datos sintéticos `.invalid` y firma
otro objeto. `baseline/` contiene copias byte-idénticas del fixture/schema
públicos de WD, con hashes y fuentes en `baseline/provenance.json`. La
comprobación valida los receipts positivos contra esa copia del schema 0.1.
El paquete también funciona extraído sin el resto del repositorio.
Todos los inputs necesarios para reimplementar las comparaciones están en los
vectores; no se necesita un issuer privado. Instalar paquetes sí requiere sus
repositorios habituales; los checks posteriores no consultan red/DNS/RPC.

## Qué cuenta como positivo

`P1_BINDING_FIXTURE_OK`: firmas y vínculos locales correctos bajo contexto de
prueba, **siempre** con `can_assert_xcim_pass=false`. `FRAME_OK`: sólo framing y
JSON; una Proof con `fixture` en los casos de header no es evidencia válida.
El checker de binding rechaza Proof presente porque falta su verificador.

El reloj está fijado al 2026-10-19T12:02:00Z, con timestamps de generación
deterministas. Los estados de `context.json` son entradas **sintéticas** que
permiten ensayar rechazo de revocación, caducidad y pérdida de autoridad; no
son formatos de estado autenticado. Los tests de replay no implementan un
store compartido ni transacciones SMTP. Todos los códigos de test son locales.

## Cobertura de esta revisión

- 7 schemas; 24 casos estructurales.
- 20 casos de header, contrastados con un parser ABNF separado, más límites de recursos.
- 91 casos de binding: 7 positivos y 84 adversariales.
- Firmas nuevas RBA/MSA/MP y receipt legacy de fixture, roles y scopes exactos,
  dirección/IDNA E1, hashes y canonicalización, vigencias, estado simulado,
  sustituciones, tenant/control key equivocado, DKIM/cobertura y replay.
- Contraste Python/Node de cuatro firmas y su alteración, bytes canónicos,
  compromisos de dirección/recibo/envelopes/contenido y JWK thumbprint.
- Regeneración byte a byte y manifest de integridad del conjunto.

Los resultados de la entrega se registran en [PROGRESS](https://xcim.org/standardization/#progress).
No equivalen a revisión criptográfica externa ni a interoperabilidad de equipos
independientes. La [matriz](https://xcim.org/standardization/source/READINESS-MATRIX.md) conserva los criterios M/O.
