Contenedor de informes de validación DSS de Docuten eArchiving v1

Docuten eArchiving DSS Validation Report Container v1

Metadato Valor
Versión / Version v1
Estado / Status Vigente desde la fase 06.5 para todo AIP nuevo cuyo paso 5 valide al menos un fichero con firma
URI del perfil / Profile URI https://docs.docuten.com/earchiving/dss-validation-report/v1
Dónde se cita / Where it is cited Contenido de metadata/preservation/dss-validation-report.xml (digiprovMD[ID=digiprov-3], un solo mdRef), parte del AIP sellado
Implementación / Implementation DssReportContainerBuilder y DigitalSignatureValidatedTasklet, en earchiving-ingest/.../ingest/steps/
Decisiones / Decisions D-14, D-15 (06.5-CONTEXT.md)
Fecha / Date 2026-11-02

1. Propósito / Purpose

Un AIP con N ficheros firmados conserva N informes de validación DSS (ETSI TS 119 102-2), uno por fichero validado, dentro de un único documento XML en la ruta de siempre. Cada entrada conserva los bytes del informe exactos (en base64) y los enlaza con el fichero al que pertenecen y con el evento DIGITAL_SIGNATURE_VALIDATION correspondiente. No se sintetiza ningún informe multi-documento ni se descarta ningún informe por fichero (D-14).

La URI es un identificador, no una URL que deba resolverse.

Cambiar este formato es una versión nueva (v2), nunca una edición: el contenedor queda dentro del AIP sellado.

An AIP with N signed files keeps N DSS validation reports (ETSI TS 119 102-2), one per validated file, inside a single XML document at the usual path. Each entry keeps the exact report bytes (base64) and links them to the file they belong to and to its DIGITAL_SIGNATURE_VALIDATION event. No synthetic multi-document report is built and no per-file report is dropped. Changing the format is a new version (v2), never an edit.


2. Ubicación / Location

3. Estructura / Structure

<?xml version="1.0" encoding="UTF-8"?>
<dss:dssValidationReports xmlns:dss="https://docs.docuten.com/earchiving/dss-validation-report/v1" version="1">
  <dss:report aipPath="…/representations/rep-1/data/a/x.pdf"
              fileSha256="…64 hex…"
              indication="TOTAL_PASSED"
              subIndication="…"
              reportSha256="…64 hex…">
    <dss:content encoding="base64">…bytes exactos del informe…</dss:content>
  </dss:report>
  <!-- una dss:report por fichero validado -->
</dss:dssValidationReports>
Elemento / atributo Significado
dss:dssValidationReports@version Versión del formato: version="1"
dss:report@aipPath Ruta completa del fichero firmado dentro del AIP (la misma que el evento)
dss:report@fileSha256 SHA-256 hexadecimal en minúsculas del fichero firmado tal como se validó
dss:report@indication Indicación DSS (hoy siempre TOTAL_PASSED: solo se conserva el informe de lo que pasó)
dss:report@subIndication Subindicación DSS; se omite si no hay
dss:report@reportSha256 SHA-256 hexadecimal en minúsculas de los bytes del informe, antes de codificarlos
dss:content Los bytes exactos del informe en base64 (RFC 4648 §4), sin saltos de línea, con encoding="base64"

4. Orden y determinismo / Order and determinism

5. Enlace con los eventos / Link to the events

Cada evento DIGITAL_SIGNATURE_VALIDATION por fichero lleva en linkingObjectIdentifiers la pareja (aipPath, sha256). Esa misma pareja (aipPath, fileSha256) identifica la entrada del contenedor: no hay identificador adicional.

6. Verificación offline / Offline verification

  1. Localizar la entrada por aipPath (y comprobar que fileSha256 coincide con el del evento).
  2. Decodificar el texto de dss:content con base64.
  3. Calcular el SHA-256 de los bytes decodificados y compararlo con reportSha256.
  4. Los bytes decodificados son el informe ETSI TS 119 102-2 que devolvió DSS, sin alteración.

7. Cotas / Limits

Fail-closed: si se rebasa una cota el paso 5 aborta y no se conserva nada a medias.

Cota Valor
Tamaño de un informe 4 MiB
Suma de informes en un contenedor 64 MiB

También abortan un informe vacío y un aipPath repetido. Las cotas son una hipótesis de dimensionado (el informe medido más grande es de ~60 KB; no se midió un PAdES-LTA real de un QTSP) y quedan muy por debajo del techo de 256 MiB de copyFromUrl. El base64 añade ~33 % de tamaño, aceptado a cambio de informes verificables byte a byte.

8. Coexistencia con AIP anteriores / Coexistence with earlier AIPs

Los AIP anteriores a la fase 06.5 llevan en esta ruta el informe ETSI TS 119 102-2 de un solo fichero, sin contenedor: el lector distingue por el elemento raíz (dss:dssValidationReports en el espacio de nombres de esta v1 frente al elemento raíz del informe ETSI crudo).

AIPs created before phase 06.5 carry at this path the raw ETSI TS 119 102-2 report of a single file, with no container: readers tell them apart by the root element.

9. Versionado / Versioning