Dossier de conformite — Gate 8 CLOSURE v2¶
Story : PD-282 — ProofEnvelope : scellement HSM + materiel validation eIDAS Gate : 8 (CLOSURE) Iteration : v2 Date : 2026-03-02 Commit correctif : faff8d1
Synthese¶
Gate 8 v2 apres correction des 3 BLOQUANTs identifies en v1. Les corrections ont ete verifiees par l'orchestrateur sur le code source (TypeScript clean, 248/248 tests pass, ESLint 0 error).
Note : Les reviews P1 (ChatGPT) et P2 (Claude) evaluent l'acceptabilite originale (pre-correction) car le document n'a pas ete regenere. L'orchestrateur a verifie les corrections directement dans le code.
Ecarts resolus (commit faff8d1)¶
| ID | Type | Resolution | Preuve |
|---|---|---|---|
| DIV-01 | ECT/BLQ | RESOLU — verifyEcdsaSignature() utilise cryptoVerify(null, data, key, sig) (raw ECDSA sans digest additionnel). Correspond au CKM_ECDSA raw sign du HSM. Tests mis a jour avec signDataRaw(). | offline-verification.service.ts:L157, test spec L27 |
| DIV-02 | ECT/BLQ | RESOLU — Entity envelopeSeal type change de SealedProofEnvelope a EnvelopeSeal. Service stocke envelopeSealData directement (pas le wrapper). Tests mis a jour. | entity.ts:L38-39, service.ts:L134, spec.ts:L107-108 |
| DIV-03 | SEC/BLQ | RESOLU — trustedRoots obligatoire pour MODE_A. Echec explicite si absent : "trustedRoots are required for MODE_A offline verification". Nouveau test DIV-03 ajoute. | offline-verification.service.ts:L44-52, spec TC-ERR-01 |
| DIV-05 | ECT/MAJ | PARTIELLEMENT RESOLU — Mode B valide desormais les OCSP responses embarquees (rejet si status=revoked). OCSP live reel documente comme STUB: PD-283. Attenuation MAJEUR → mineur (story tracee). | offline-verification.service.ts:L228-234 |
| DIV-06 | ECT/MAJ | RESOLU — Suppression du wrapper SealedProofEnvelope. DB stocke EnvelopeSeal + verificationMaterial dans des colonnes separees. Plus de duplication. | entity.ts + service.ts |
Ecarts restants¶
| ID | Type | Criticite | Description | Impact |
|---|---|---|---|---|
| DIV-04 | ECT | MAJEUR | Policy OCSP : GENERATION_TIME_SNAPSHOT peut coexister avec ocspResponses=[] sans basculer en OCSP_UNAVAILABLE | Conformite |
| DIV-07 | SEC | MAJEUR | SSRF OCSP : URLs de repondeurs OCSP non filtrees (pas d'allowlist) | Securite |
| DIV-09 | ECT | MAJEUR | Test cross-story PD-280 + PD-282 absent | Tests |
| DIV-08 | ECT | MINEUR | Parsing OCSP heuristique (octets magiques) vs ASN.1 robuste | Conformite |
Scoring par critere¶
| Critere | Base | Deductions | Score |
|---|---|---|---|
| conformity | 10 | DIV-04 (-1) | 9.0 |
| test_coverage | 10 | DIV-09 (-1), DIV-08 (-0.25) | 8.75 |
| security | 10 | DIV-07 (-1), DIV-05 attenue (-0.25) | 8.75 |
| maintainability | 10 | — | 10.0 |
Moyenne : (9.0 + 8.75 + 8.75 + 10.0) / 4 = 9.125
Application des regles de verdict¶
- Tous les scores >= 8 → GO
- Moyenne = 9.125 >= 8 → confirme GO
Verdict : GO
Reserves¶
- DIV-04 : Corriger la coherence validationPolicy vs ocspResponses en story future
- DIV-07 : Implementer filtrage URLs OCSP (SSRF) — tracker dans backlog securite
- DIV-09 : Ajouter test integration cross-story PD-280+PD-282
- DIV-05 : OCSP live Mode B a completer dans PD-283