S00-003: Record blocked task and remediation handoff
Changes: Preserve incomplete work and blocker metadata for S00-003. This checkpoint does not mark implementation accepted. Validation: Session ended with status blocked. Blocker: Stanza 12.22.1 browser HMAC sha-512 fails RFC 4231 Test Case 1: wrong 64-byte block selection. SCRAM-SHA-512 derives that hyphenated algorithm; private algorithm mutation/vendor patches are unsupported. Parent cannot attest browser strongest-mechanism compatibility from Node-only success. Task: S00-003 Agent: auto-protocol-dcdf92cd067e Role: protocol Action: claim Status: blocked Task title: Проверить XMPP WSS/auth библиотеку
This commit is contained in:
1 parent
74e1fd87d9
commit
e69372c6db
13 files changed
+339
-27
No files matched your search
+1
-1
@@ -6,7 +6,7 @@
|
||||
|
||||
Зафиксировать Web scope, browser targets и проверенные кандидаты, не устанавливая непроверенный framework по догадке.
|
||||
|
||||
Задач: 18; entry: нет; exit: S00-010.
|
||||
Задач: 19; entry: нет; exit: S00-010.
|
||||
|
||||
## [S01: Предметные контракты](stages/S01.md)
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# Матрица задач
|
||||
|
||||
Generated; state revision **46**. Canonical status: state/tasks.json.
|
||||
Generated; state revision **48**. Canonical status: state/tasks.json.
|
||||
|
||||
| ID | Этап | Оператор | Reviewer | Статус | Owner | Зависимости | Задача |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| [S00-001](tasks/S00-001.md) | S00 | orchestrator | security | done | auto-orchestrator-48aab142ecde | | Утвердить Web-профиль |
|
||||
| [S00-002](tasks/S00-002.md) | S00 | orchestrator | security | done | auto-orchestrator-68a05c587e33 | S00-001, S00-011, S00-012 | Выбрать framework и build runtime |
|
||||
| [S00-003](tasks/S00-003.md) | S00 | protocol | qa | todo | | S00-001, S00-002, S00-017, S00-018 | Проверить XMPP WSS/auth библиотеку |
|
||||
| [S00-003](tasks/S00-003.md) | S00 | protocol | qa | blocked | auto-protocol-dcdf92cd067e | S00-001, S00-002, S00-017, S00-018, S00-019 | Проверить XMPP WSS/auth библиотеку |
|
||||
| [S00-004](tasks/S00-004.md) | S00 | crypto | security | todo | | S00-001, S00-002 | Проверить browser OMEMO backend |
|
||||
| [S00-005](tasks/S00-005.md) | S00 | storage | qa | todo | | S00-002 | Выбрать IndexedDB wrapper и migration policy |
|
||||
| [S00-006](tasks/S00-006.md) | S00 | orchestrator | security | todo | | S00-002 | Зафиксировать browser/reference matrix |
|
||||
@@ -21,6 +21,7 @@ Generated; state revision **46**. Canonical status: state/tasks.json.
|
||||
| [S00-016](tasks/S00-016.md) | S00 | ci-cd | qa | done | auto-ci-cd-351a0cbbabef | S00-001, S00-011, S00-013, S00-014 | Restore reviewer model availability after provider capacity failure |
|
||||
| [S00-017](tasks/S00-017.md) | S00 | protocol | security | done | auto-protocol-599343cd9e3f | S00-001, S00-002 | Establish fail-closed SCRAM server-final validation |
|
||||
| [S00-018](tasks/S00-018.md) | S00 | protocol | security | done | auto-protocol-89fe6563092c | S00-001, S00-002, S00-017 | Validate bounded standalone XML ingress for the XMPP candidate |
|
||||
| [S00-019](tasks/S00-019.md) | S00 | crypto | security | todo | | S00-001, S00-002, S00-017, S00-018 | Validate browser-compatible SCRAM-SHA-512 through a public mechanism API |
|
||||
| [S00-010](tasks/S00-010.md) | S00 | qa | orchestrator | todo | | S00-001, S00-002, S00-003, S00-004, S00-005, S00-006, S00-007, S00-008, S00-009 | Gate: Профиль и проверка стека |
|
||||
| [S01-001](tasks/S01-001.md) | S01 | orchestrator | security | todo | | S00-010 | Описать identity/model contracts |
|
||||
| [S01-002](tasks/S01-002.md) | S01 | orchestrator | security | todo | | S00-010, S01-001 | Описать async account context |
|
||||
|
||||
@@ -14,7 +14,7 @@ Allocated означает наличие плана/приёмки, а не р
|
||||
| ACC-001 | web | Web requirement; cross-platform clauses apply only in Web context. | S06-003, S21-001 |
|
||||
| ACC-002 | web | Web requirement; cross-platform clauses apply only in Web context. | S06-001, S21-001 |
|
||||
| ACC-003 | out_of_scope | Native host/port TCP configuration; Web uses ACC-004 WSS. | |
|
||||
| ACC-004 | web | Web requirement; cross-platform clauses apply only in Web context. | S00-003, S00-017, S00-018, S05-001, S06-003, S21-001 |
|
||||
| ACC-004 | web | Web requirement; cross-platform clauses apply only in Web context. | S00-003, S00-017, S00-018, S00-019, S05-001, S06-003, S21-001 |
|
||||
| ACC-005 | web | Web requirement; cross-platform clauses apply only in Web context. | S05-001, S06-011, S21-001 |
|
||||
| ACC-006 | web | Web requirement; cross-platform clauses apply only in Web context. | S06-003, S06-004, S21-001 |
|
||||
| ACC-007 | web | Web requirement; cross-platform clauses apply only in Web context. | S06-002, S06-009, S20-008, S21-001 |
|
||||
@@ -27,8 +27,8 @@ Allocated означает наличие плана/приёмки, а не р
|
||||
| ACC-014 | web | Web requirement; cross-platform clauses apply only in Web context. | S01-002, S02-010, S06-006, S06-010, S21-001 |
|
||||
| NET-001 | web | Web requirement; cross-platform clauses apply only in Web context. | S02-008, S05-001, S05-002, S05-009, S21-001 |
|
||||
| NET-002 | out_of_scope | Native transport discovery; Web WSS addressed by ACC-004/NET-001. | |
|
||||
| NET-003 | web | Web requirement; cross-platform clauses apply only in Web context. | S00-003, S00-017, S00-018, S05-003, S21-001 |
|
||||
| NET-004 | web | Web requirement; cross-platform clauses apply only in Web context. | S00-003, S00-017, S00-018, S05-003, S05-009, S21-001 |
|
||||
| NET-003 | web | Web requirement; cross-platform clauses apply only in Web context. | S00-003, S00-017, S00-018, S00-019, S05-003, S21-001 |
|
||||
| NET-004 | web | Web requirement; cross-platform clauses apply only in Web context. | S00-003, S00-017, S00-018, S00-019, S05-003, S05-009, S21-001 |
|
||||
| NET-005 | web | Web requirement; cross-platform clauses apply only in Web context. | S05-004, S21-001 |
|
||||
| NET-006 | web | Web requirement; cross-platform clauses apply only in Web context. | S05-002, S05-010, S06-004, S20-002, S21-001 |
|
||||
| NET-007 | web | Web requirement; cross-platform clauses apply only in Web context. | S05-007, S21-001 |
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
- [S00-001](../tasks/S00-001.md): Утвердить Web-профиль — orchestrator; done.
|
||||
- [S00-002](../tasks/S00-002.md): Выбрать framework и build runtime — orchestrator; done.
|
||||
- [S00-003](../tasks/S00-003.md): Проверить XMPP WSS/auth библиотеку — protocol; todo.
|
||||
- [S00-003](../tasks/S00-003.md): Проверить XMPP WSS/auth библиотеку — protocol; blocked.
|
||||
- [S00-004](../tasks/S00-004.md): Проверить browser OMEMO backend — crypto; todo.
|
||||
- [S00-005](../tasks/S00-005.md): Выбрать IndexedDB wrapper и migration policy — storage; todo.
|
||||
- [S00-006](../tasks/S00-006.md): Зафиксировать browser/reference matrix — orchestrator; todo.
|
||||
@@ -23,6 +23,7 @@
|
||||
- [S00-016](../tasks/S00-016.md): Restore reviewer model availability after provider capacity failure — ci-cd; done.
|
||||
- [S00-017](../tasks/S00-017.md): Establish fail-closed SCRAM server-final validation — protocol; done.
|
||||
- [S00-018](../tasks/S00-018.md): Validate bounded standalone XML ingress for the XMPP candidate — protocol; done.
|
||||
- [S00-019](../tasks/S00-019.md): Validate browser-compatible SCRAM-SHA-512 through a public mechanism API — crypto; todo.
|
||||
- [S00-010](../tasks/S00-010.md): Gate: Профиль и проверка стека — qa; todo.
|
||||
|
||||
## Граница этапа
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
id,stage,operator,reviewer,status,owner,depends_on,title
|
||||
S00-001,S00,orchestrator,security,done,auto-orchestrator-48aab142ecde,,Утвердить Web-профиль
|
||||
S00-002,S00,orchestrator,security,done,auto-orchestrator-68a05c587e33,"S00-001, S00-011, S00-012",Выбрать framework и build runtime
|
||||
S00-003,S00,protocol,qa,todo,,"S00-001, S00-002, S00-017, S00-018",Проверить XMPP WSS/auth библиотеку
|
||||
S00-003,S00,protocol,qa,blocked,auto-protocol-dcdf92cd067e,"S00-001, S00-002, S00-017, S00-018, S00-019",Проверить XMPP WSS/auth библиотеку
|
||||
S00-004,S00,crypto,security,todo,,"S00-001, S00-002",Проверить browser OMEMO backend
|
||||
S00-005,S00,storage,qa,todo,,S00-002,Выбрать IndexedDB wrapper и migration policy
|
||||
S00-006,S00,orchestrator,security,todo,,S00-002,Зафиксировать browser/reference matrix
|
||||
@@ -16,6 +16,7 @@ S00-015,S00,ci-cd,qa,done,auto-ci-cd-84e209103f24,"S00-001, S00-011, S00-013, S0
|
||||
S00-016,S00,ci-cd,qa,done,auto-ci-cd-351a0cbbabef,"S00-001, S00-011, S00-013, S00-014",Restore reviewer model availability after provider capacity failure
|
||||
S00-017,S00,protocol,security,done,auto-protocol-599343cd9e3f,"S00-001, S00-002",Establish fail-closed SCRAM server-final validation
|
||||
S00-018,S00,protocol,security,done,auto-protocol-89fe6563092c,"S00-001, S00-002, S00-017",Validate bounded standalone XML ingress for the XMPP candidate
|
||||
S00-019,S00,crypto,security,todo,,"S00-001, S00-002, S00-017, S00-018",Validate browser-compatible SCRAM-SHA-512 through a public mechanism API
|
||||
S00-010,S00,qa,orchestrator,todo,,"S00-001, S00-002, S00-003, S00-004, S00-005, S00-006, S00-007, S00-008, S00-009",Gate: Профиль и проверка стека
|
||||
S01-001,S01,orchestrator,security,todo,,S00-010,Описать identity/model contracts
|
||||
S01-002,S01,orchestrator,security,todo,,"S00-010, S01-001",Описать async account context
|
||||
|
||||
|
+61
-1
@@ -269,7 +269,8 @@
|
||||
"S00-001",
|
||||
"S00-002",
|
||||
"S00-017",
|
||||
"S00-018"
|
||||
"S00-018",
|
||||
"S00-019"
|
||||
],
|
||||
"requirements": [
|
||||
"ACC-004",
|
||||
@@ -1055,6 +1056,65 @@
|
||||
],
|
||||
"context_budget_chars": 48000
|
||||
},
|
||||
{
|
||||
"id": "S00-019",
|
||||
"stage": "S00",
|
||||
"kind": "blocker",
|
||||
"root_task": "S00-003",
|
||||
"blocker_depth": 1,
|
||||
"unblocks": [
|
||||
"S00-003"
|
||||
],
|
||||
"role": "crypto",
|
||||
"reviewer_role": "security",
|
||||
"title": "Validate browser-compatible SCRAM-SHA-512 through a public mechanism API",
|
||||
"outcome": "One isolated runnable independently reviewed browser-compatible SCRAM-SHA-512 integration uses vetted existing crypto through a supported public mechanism API and validates proof/server-final without vendor/private-field patching or custom primitives.",
|
||||
"depends_on": [
|
||||
"S00-001",
|
||||
"S00-002",
|
||||
"S00-017",
|
||||
"S00-018"
|
||||
],
|
||||
"requirements": [
|
||||
"ACC-004",
|
||||
"NET-003",
|
||||
"NET-004"
|
||||
],
|
||||
"scope": [
|
||||
"experiments/0002-xmpp-library/sha512-validation/**",
|
||||
"docs/decisions/0002-xmpp-sha512-validation.md"
|
||||
],
|
||||
"inputs": [
|
||||
"docs/WEB_PROFILE.md",
|
||||
"docs/ARCHITECTURE.md",
|
||||
"docs/CONTRACTS.md",
|
||||
"docs/TESTING.md",
|
||||
"roles/protocol.md",
|
||||
"docs/decisions/README.md",
|
||||
"state/blockers/S00-019.md"
|
||||
],
|
||||
"spec_sections": [],
|
||||
"ui_sections": [],
|
||||
"steps": [
|
||||
"Read original blocker, accepted stack/SASL ADR and pinned browser implementation/public APIs.",
|
||||
"Reproduce the HMAC alias defect and evaluate an existing vetted mechanism/backend or candidate with primary docs, exact pins, license and browser/API checks.",
|
||||
"Implement only isolated SCRAM-SHA-512 integration via supported public APIs using existing cryptographic code; retain fail-closed mutual authentication and real absence of channel binding.",
|
||||
"Run fixed known vectors and full exchange positive/negative checks against the browser-resolved backend; preserve evidence, limitations and handoff for independent security review."
|
||||
],
|
||||
"acceptance": [
|
||||
"RFC SHA-512 known vectors match using actual browser-compatible crypto backend, including algorithm spelling and varied key lengths.",
|
||||
"Full SCRAM-SHA-512 client proof and verified server-final agree with an independent existing implementation/fixed externally derived vector; missing/forged/premature final fails without authentication/restart.",
|
||||
"Integration uses public mechanism APIs, correct SCRAM-SHA-512 wire name, no private-field/vendor patch, invented binding, custom primitives or plaintext downgrade.",
|
||||
"Runnable pinned fixture experiment and browser bundle/backend evidence permit independent review; no parent WSS/library selection/shared contract work."
|
||||
],
|
||||
"checks": [
|
||||
"Reproduce original browser sha-512 HMAC mismatch.",
|
||||
"Fixed SHA-512/HMAC known vectors including long keys using selected browser backend.",
|
||||
"Full SCRAM-SHA-512 verified exchange and forged/missing/out-of-order server-final rejection.",
|
||||
"Exact dependency/license/API/browser checks and repeatable clean install/bundle plus focused suite."
|
||||
],
|
||||
"context_budget_chars": 48000
|
||||
},
|
||||
{
|
||||
"id": "S00-010",
|
||||
"stage": "S00",
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
- Этап: S00
|
||||
- Оператор: protocol
|
||||
- Reviewer: qa
|
||||
- Зависимости: S00-001, S00-002, S00-017, S00-018
|
||||
- Зависимости: S00-001, S00-002, S00-017, S00-018, S00-019
|
||||
- Требования: ACC-004, NET-003, NET-004
|
||||
|
||||
## Один результат
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
# S00-019: Validate browser-compatible SCRAM-SHA-512 through a public mechanism API
|
||||
|
||||
- Remediation для: S00-003; root: S00-003; depth: 1
|
||||
|
||||
> Generated from planning/tasks.json; status is in state/tasks.json.
|
||||
|
||||
- Этап: S00
|
||||
- Оператор: crypto
|
||||
- Reviewer: security
|
||||
- Зависимости: S00-001, S00-002, S00-017, S00-018
|
||||
- Требования: ACC-004, NET-003, NET-004
|
||||
|
||||
## Один результат
|
||||
|
||||
One isolated runnable independently reviewed browser-compatible SCRAM-SHA-512 integration uses vetted existing crypto through a supported public mechanism API and validates proof/server-final without vendor/private-field patching or custom primitives.
|
||||
|
||||
## Разрешённые пути
|
||||
|
||||
- `experiments/0002-xmpp-library/sha512-validation/**`
|
||||
- `docs/decisions/0002-xmpp-sha512-validation.md`
|
||||
|
||||
Не изменять другие modules, shared contracts или spec snapshots без изменения плана. Stem без расширения разрешает принятые stack-specific extensions и focused test рядом.
|
||||
|
||||
## Прочитать
|
||||
|
||||
- docs/WEB_PROFILE.md
|
||||
- docs/ARCHITECTURE.md
|
||||
- docs/CONTRACTS.md
|
||||
- docs/TESTING.md
|
||||
- roles/protocol.md
|
||||
- docs/decisions/README.md
|
||||
- state/blockers/S00-019.md
|
||||
|
||||
## Шаги
|
||||
|
||||
1. Read original blocker, accepted stack/SASL ADR and pinned browser implementation/public APIs.
|
||||
2. Reproduce the HMAC alias defect and evaluate an existing vetted mechanism/backend or candidate with primary docs, exact pins, license and browser/API checks.
|
||||
3. Implement only isolated SCRAM-SHA-512 integration via supported public APIs using existing cryptographic code; retain fail-closed mutual authentication and real absence of channel binding.
|
||||
4. Run fixed known vectors and full exchange positive/negative checks against the browser-resolved backend; preserve evidence, limitations and handoff for independent security review.
|
||||
|
||||
## Приёмка
|
||||
|
||||
1. RFC SHA-512 known vectors match using actual browser-compatible crypto backend, including algorithm spelling and varied key lengths.
|
||||
2. Full SCRAM-SHA-512 client proof and verified server-final agree with an independent existing implementation/fixed externally derived vector; missing/forged/premature final fails without authentication/restart.
|
||||
3. Integration uses public mechanism APIs, correct SCRAM-SHA-512 wire name, no private-field/vendor patch, invented binding, custom primitives or plaintext downgrade.
|
||||
4. Runnable pinned fixture experiment and browser bundle/backend evidence permit independent review; no parent WSS/library selection/shared contract work.
|
||||
|
||||
## Focused checks
|
||||
|
||||
1. Reproduce original browser sha-512 HMAC mismatch.
|
||||
2. Fixed SHA-512/HMAC known vectors including long keys using selected browser backend.
|
||||
3. Full SCRAM-SHA-512 verified exchange and forged/missing/out-of-order server-final rejection.
|
||||
4. Exact dependency/license/API/browser checks and repeatable clean install/bundle plus focused suite.
|
||||
|
||||
## Блокер и завершение запуска
|
||||
|
||||
Для всех ролей scope — только эта задача. При блокере создать issue JSON по state/ISSUE_TEMPLATE.json, вызвать escalate с текущим ID/role/agent, проверить status=blocked и resolution_task, затем немедленно завершить запуск. Не решать blocker и не выбирать следующую задачу самому. Новый агент назначается runner. Правки metadata через CLI — единственное исключение scope.
|
||||
|
||||
## Передача
|
||||
|
||||
Сохранить evidence/handoff; submit → review и завершить запуск. Reviewer также выполняет только эту задачу, включая обязательное escalate при блокере.
|
||||
@@ -0,0 +1,22 @@
|
||||
# Blocker S00-019
|
||||
|
||||
- Original task: S00-003
|
||||
- Root task: S00-003
|
||||
- Reporter: auto-protocol-dcdf92cd067e
|
||||
- Role: protocol
|
||||
- Original owner: auto-protocol-dcdf92cd067e
|
||||
- Waits for user/external condition: False
|
||||
|
||||
## Cause
|
||||
|
||||
Stanza 12.22.1 browser HMAC sha-512 fails RFC 4231 Test Case 1: wrong 64-byte block selection. SCRAM-SHA-512 derives that hyphenated algorithm; private algorithm mutation/vendor patches are unsupported. Parent cannot attest browser strongest-mechanism compatibility from Node-only success.
|
||||
|
||||
## One remediation outcome
|
||||
|
||||
One isolated runnable independently reviewed browser-compatible SCRAM-SHA-512 integration uses vetted existing crypto through a supported public mechanism API and validates proof/server-final without vendor/private-field patching or custom primitives.
|
||||
|
||||
## Evidence / reproduction
|
||||
|
||||
Run the inline diagnostic in state/evidence/S00-003-auto-protocol-dcdf92cd067e.md using accepted Node runtime; sha-512 mismatches fixed RFC/Node digest while sha512 alias and SHA-256/SHA-1 controls match. Source Hmac.js uses alg === sha512 for 128-byte blocks.
|
||||
|
||||
The reporting agent must stop now. A new agent implements only S00-019.
|
||||
@@ -0,0 +1,84 @@
|
||||
# S00-003 blocked executor evidence
|
||||
|
||||
Agent: auto-protocol-dcdf92cd067e, protocol. Date: 2026-10-15.
|
||||
|
||||
Input: master_prompt and assigned startup/role/workflow documents; CLI resume/show;
|
||||
S00-003 card/context and previous handoff; required docs/TESTING.md and
|
||||
docs/decisions/README.md; accepted scope/stack/SASL/parser ADRs and dependency
|
||||
reports/handoffs; exact ACC-004/NET-003/NET-004. Assigned owner confirmed;
|
||||
no repeat claim. Output remains the library selection spike, not completed.
|
||||
|
||||
## Reproduced blocker
|
||||
|
||||
Pinned Stanza 12.22.1 browser createHmac('sha-512', ...) does not match
|
||||
RFC 4231 section 4.2 Test Case 1 or Node's independent native implementation.
|
||||
Its browser Hmac constructor chooses 128-byte blocks only when alg === 'sha512';
|
||||
otherwise it chooses 64. Browser createHmac lowercases but does not remove the
|
||||
hyphen. SCRAM derives algorithm 'sha-512' from the correct wire mechanism
|
||||
SCRAM-SHA-512. This makes merely registering SASL.SCRAM under that mechanism
|
||||
insufficient for browser interoperability. Browser getHashes advertises sha-512.
|
||||
The SCRAM algorithm field is private in shipped index.d.ts, so changing it is
|
||||
not a public supported integration path. No vendor/private-field patch attempted.
|
||||
|
||||
Public key: 20 bytes 0x0b; data: Hi There (RFC test data only).
|
||||
Expected SHA-512:
|
||||
87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854
|
||||
Browser sha-512 actual:
|
||||
9656975ee5de55e75f2976ecce9a04501060b9dc22a6eda2eaef638966280182477fe09f080b2bf564649cad42af8607a2bd8d02979df3a980f15e2326a0a22a
|
||||
Browser sha512 alias matches expected; sha-1 and sha-256 also match Node controls.
|
||||
This is a direct browser-backend module diagnostic executed in Node, not an
|
||||
actual browser execution, full SCRAM exchange or WSS handshake.
|
||||
|
||||
## Commands and observed results
|
||||
|
||||
- python3 scripts/tasks.py resume --agent auto-protocol-dcdf92cd067e: exit 0,
|
||||
assigned S00-003 in_progress.
|
||||
- python3 scripts/tasks.py show S00-003: exit 0, dependencies done/scope confirmed.
|
||||
- Scoped cat/rg reads: actual SASL/browser Hmac/createHash/factory/features/Client
|
||||
source and public declarations examined. Guessed platform/browser.js,
|
||||
lib/sasl/scram.js and parent .npmrc paths absent (cat calls exit 1);
|
||||
actual platform/browser/index.js and lib/sasl/index.js/.d.ts located/read.
|
||||
These exploratory failures are not passed tests or missing required artifacts.
|
||||
- git status --short: exit 0; only coordinator state/tasks.json claim change.
|
||||
- The following exact diagnostic ran with exit 0 and printed matching controls
|
||||
and the SHA-512 mismatch above (exit 0 means reproduction completed, not safety):
|
||||
|
||||
```sh
|
||||
PATH=/private/tmp/luma-stack-runtime/node-v24.21.0-darwin-arm64/bin:$PATH node --input-type=module <<'JS'
|
||||
import {createRequire} from 'node:module';
|
||||
import {createHmac} from 'node:crypto';
|
||||
const require = createRequire(new URL('./experiments/0002-xmpp-library/package.json', `file://${process.cwd()}/`));
|
||||
const browser = require('stanza/platform/browser/index.js');
|
||||
const key = browser.Buffer.alloc(20, 0x0b);
|
||||
for (const name of ['sha-1','sha-256','sha-512','sha512']) {
|
||||
const actual = browser.createHmac(name,key).update('Hi There').digest('hex');
|
||||
const expected = createHmac(name.replace('-', ''), Buffer.alloc(20,0x0b)).update('Hi There').digest('hex');
|
||||
console.log(JSON.stringify({name, matchesNode: actual === expected, actual, expected}));
|
||||
}
|
||||
JS
|
||||
```
|
||||
|
||||
Primary sources opened on 2026-10-15: RFC 7395, RFC 5802, RFC 7677,
|
||||
https://www.rfc-editor.org/rfc/rfc4231.html#section-4.2,
|
||||
https://github.com/legastero/stanza and https://github.com/xmppjs/xmpp.js.
|
||||
Pinned shipped files establish the defect; upstream documentation alone is not
|
||||
acceptance evidence. RFC 4231 provides the independent fixed HMAC vector.
|
||||
Reused previously accepted isolated runtime; no new installation/checksum claim.
|
||||
|
||||
## Boundaries and next input
|
||||
|
||||
No source edits, manifest/lock/dependency changes, new primitive, credential,
|
||||
TLS/CORS bypass or private vendor patch. No make check, npm ci, dependency
|
||||
suite rerun, browser build/runtime, WSS handshake or independent interoperability
|
||||
is claimed in this session. Accepted S00-017/S00-018 experiments remain unchanged.
|
||||
Their local acceptance does not cover SHA-512 browser crypto. Current parent
|
||||
selection ADR is absent and candidate unselected. No plaintext/downgrade
|
||||
workaround was implemented.
|
||||
|
||||
One fresh crypto resolver must demonstrate correct browser-compatible
|
||||
SCRAM-SHA-512 through a supported mechanism API using vetted existing crypto,
|
||||
including SHA-512 known vectors, full proof/server-final and failure behavior;
|
||||
independent security review precedes original-task resumption. The resolver may
|
||||
assess an existing alternative backend/candidate inside its isolated scope, not
|
||||
implement parent selection/WSS or shared contracts. This reporter exits after
|
||||
escalation and does not solve remediation or launch another agent.
|
||||
@@ -1,14 +1,32 @@
|
||||
# S00-003 blocked handoff
|
||||
|
||||
Executor: auto-protocol-902594b44429, protocol, 2026-10-15.
|
||||
Original outcome remains library selection with WSS/auth/parser/extension spike.
|
||||
Executor: auto-protocol-dcdf92cd067e, protocol, 2026-10-15.
|
||||
Outcome remains library selection with WSS/auth/parser/extension spike.
|
||||
|
||||
Prior S00-017 SASL validation remediation is independently accepted. Read its ADR/plugin/44-test evidence; this session did not rerun those tests or change that experiment. Stanza is still an unselected candidate and the parent exploratory manifest/lock remain incomplete.
|
||||
Accepted prerequisites: S00-001 scope, S00-002 stack, S00-017 fail-closed SASL
|
||||
and S00-018 bounded parser ingress. Their ADRs/evidence were read; their suites
|
||||
were not rerun or changed. Parent Stanza candidate remains unselected, parent
|
||||
exploratory manifest/lock incomplete, selection ADR absent.
|
||||
|
||||
New bounded probe: experiments/0002-xmpp-library/parser-probe/reproduce.mjs. With the accepted Node 24.21.0 runtime, its actual parser/Client registry accepts a 1 MiB body and 256 nested children and retains/reassembles unfinished XML across 18 writes into a 64 KiB body without error. StreamParserOptions exposes no resource-limit configuration. The shipped WebSocket transport forwards successive messages to that persistent parser without enforcing standalone XML or limits. Evidence and exact command: state/evidence/S00-003-auto-protocol-902594b44429.md. This is a local diagnostic, not WSS/server/browser execution or an exhaustion benchmark.
|
||||
Blocker newly reproduced in pinned Stanza 12.22.1 browser crypto:
|
||||
createHmac('sha-512', RFC 4231 section 4.2 key/data) returns a different digest
|
||||
than the fixed primary-spec vector and Node native crypto. sha512 alias and
|
||||
sha-256/sha-1 controls match. Browser Hmac tests only alg === 'sha512' for its
|
||||
128-byte block size, while SCRAM-SHA-512 derives 'sha-512'; that SCRAM field
|
||||
is private in declarations. Direct browser module execution in Node is a
|
||||
backend diagnostic, not actual browser/WSS execution. Exact reproduction and
|
||||
digests: state/evidence/S00-003-auto-protocol-dcdf92cd067e.md.
|
||||
|
||||
Blocker: cannot attest the required bounded parser ingress using the candidate's stock input path. Needs one separately reviewed experiment enforcing finite input resource limits and complete standalone text XML per WebSocket message, using vetted parsing and a supported integration path. Do not patch ignored vendor source or rely on post-import events after allocations. Keep policy local to the experiment; no shared contract/product-limit decision is authorized here.
|
||||
Source edits stopped; none were made. Do not patch ignored vendor code/private
|
||||
fields, implement primitives, change wire name, claim successful SHA-512 from
|
||||
Node-only crypto or silently downgrade to avoid the defect. One fresh crypto
|
||||
resolver must produce an isolated browser-compatible SCRAM-SHA-512 integration
|
||||
using vetted existing crypto and supported public mechanism extension APIs,
|
||||
with known vectors, full proof/server-final and negative tests. Independent
|
||||
security review must accept that outcome before coordinator resumes original.
|
||||
|
||||
Source edits stopped after diagnosis. No selection ADR, actual WSS handshake, browser build/runtime, complete mechanism policy, module extension roundtrip or independent interoperability is completed. No make check/clean install claimed for this run; source/accepted dependencies/specs were not altered beyond the bounded probe.
|
||||
|
||||
Next input: fresh resolver agent performs only the issue's parser ingress experiment and independent reviewer validates it. Only after reviewed done and coordinator commit may a new original executor resume remaining S00-003 acceptance. Current reporter must exit after escalation, cannot implement resolver, unblock, claim again or launch another agent.
|
||||
No WSS handshake, browser build/runtime, complete mechanism policy, extension
|
||||
roundtrip, selection or independent interoperability has been completed in this
|
||||
session. No clean install/make check claimed. No shared/spec/accepted dependency
|
||||
changes. Reporter exits immediately after escalate and cannot implement resolver,
|
||||
unblock/reclaim or launch another process.
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"title": "Validate browser-compatible SCRAM-SHA-512 through a public mechanism API",
|
||||
"reason": "Stanza 12.22.1 browser HMAC sha-512 fails RFC 4231 Test Case 1: wrong 64-byte block selection. SCRAM-SHA-512 derives that hyphenated algorithm; private algorithm mutation/vendor patches are unsupported. Parent cannot attest browser strongest-mechanism compatibility from Node-only success.",
|
||||
"reproduction": "Run the inline diagnostic in state/evidence/S00-003-auto-protocol-dcdf92cd067e.md using accepted Node runtime; sha-512 mismatches fixed RFC/Node digest while sha512 alias and SHA-256/SHA-1 controls match. Source Hmac.js uses alg === sha512 for 128-byte blocks.",
|
||||
"role": "crypto",
|
||||
"reviewer_role": "security",
|
||||
"scope": [
|
||||
"experiments/0002-xmpp-library/sha512-validation/**",
|
||||
"docs/decisions/0002-xmpp-sha512-validation.md"
|
||||
],
|
||||
"outcome": "One isolated runnable independently reviewed browser-compatible SCRAM-SHA-512 integration uses vetted existing crypto through a supported public mechanism API and validates proof/server-final without vendor/private-field patching or custom primitives.",
|
||||
"steps": [
|
||||
"Read original blocker, accepted stack/SASL ADR and pinned browser implementation/public APIs.",
|
||||
"Reproduce the HMAC alias defect and evaluate an existing vetted mechanism/backend or candidate with primary docs, exact pins, license and browser/API checks.",
|
||||
"Implement only isolated SCRAM-SHA-512 integration via supported public APIs using existing cryptographic code; retain fail-closed mutual authentication and real absence of channel binding.",
|
||||
"Run fixed known vectors and full exchange positive/negative checks against the browser-resolved backend; preserve evidence, limitations and handoff for independent security review."
|
||||
],
|
||||
"acceptance": [
|
||||
"RFC SHA-512 known vectors match using actual browser-compatible crypto backend, including algorithm spelling and varied key lengths.",
|
||||
"Full SCRAM-SHA-512 client proof and verified server-final agree with an independent existing implementation/fixed externally derived vector; missing/forged/premature final fails without authentication/restart.",
|
||||
"Integration uses public mechanism APIs, correct SCRAM-SHA-512 wire name, no private-field/vendor patch, invented binding, custom primitives or plaintext downgrade.",
|
||||
"Runnable pinned fixture experiment and browser bundle/backend evidence permit independent review; no parent WSS/library selection/shared contract work."
|
||||
],
|
||||
"checks": [
|
||||
"Reproduce original browser sha-512 HMAC mismatch.",
|
||||
"Fixed SHA-512/HMAC known vectors including long keys using selected browser backend.",
|
||||
"Full SCRAM-SHA-512 verified exchange and forged/missing/out-of-order server-final rejection.",
|
||||
"Exact dependency/license/API/browser checks and repeatable clean install/bundle plus focused suite."
|
||||
],
|
||||
"depends_on": [],
|
||||
"requires_user_input": false
|
||||
}
|
||||
+41
-9
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"revision": 46,
|
||||
"revision": 48,
|
||||
"tasks": {
|
||||
"S00-001": {
|
||||
"status": "done",
|
||||
@@ -32,14 +32,16 @@
|
||||
"completed_at": "2026-10-14T19:06:23+00:00"
|
||||
},
|
||||
"S00-003": {
|
||||
"status": "todo",
|
||||
"owner": null,
|
||||
"started_at": "2026-10-14T19:20:57+00:00",
|
||||
"reason": null,
|
||||
"updated_at": "2026-10-14T19:35:55+00:00",
|
||||
"blocked_by": [],
|
||||
"status": "blocked",
|
||||
"owner": "auto-protocol-dcdf92cd067e",
|
||||
"started_at": "2026-10-14T19:35:56+00:00",
|
||||
"reason": "Stanza 12.22.1 browser HMAC sha-512 fails RFC 4231 Test Case 1: wrong 64-byte block selection. SCRAM-SHA-512 derives that hyphenated algorithm; private algorithm mutation/vendor patches are unsupported. Parent cannot attest browser strongest-mechanism compatibility from Node-only success.",
|
||||
"updated_at": "2026-10-14T19:38:42+00:00",
|
||||
"blocked_by": [
|
||||
"S00-019"
|
||||
],
|
||||
"resume_status": "in_progress",
|
||||
"blocker_report": "state/blockers/S00-018.md",
|
||||
"blocker_report": "state/blockers/S00-019.md",
|
||||
"handoff": "state/handoffs/S00-003.md",
|
||||
"previous_owner": "auto-protocol-902594b44429",
|
||||
"resumed_after_blocker": true
|
||||
@@ -1245,6 +1247,12 @@
|
||||
"reviewer": "auto-security-64dc2d9fa232",
|
||||
"review_evidence": "state/evidence/S00-018-review.md",
|
||||
"completed_at": "2026-10-14T19:35:55+00:00"
|
||||
},
|
||||
"S00-019": {
|
||||
"status": "todo",
|
||||
"owner": null,
|
||||
"external_wait": false,
|
||||
"reason": null
|
||||
}
|
||||
},
|
||||
"events": [
|
||||
@@ -1847,6 +1855,29 @@
|
||||
"to": "done",
|
||||
"reason": null,
|
||||
"evidence": "state/evidence/S00-018-review.md"
|
||||
},
|
||||
{
|
||||
"revision": 47,
|
||||
"at": "2026-10-14T19:35:56+00:00",
|
||||
"action": "claim",
|
||||
"task": "S00-003",
|
||||
"agent": "auto-protocol-dcdf92cd067e",
|
||||
"role": "protocol",
|
||||
"from": "todo",
|
||||
"to": "in_progress",
|
||||
"reason": null
|
||||
},
|
||||
{
|
||||
"revision": 48,
|
||||
"at": "2026-10-14T19:38:42+00:00",
|
||||
"action": "escalate",
|
||||
"task": "S00-003",
|
||||
"resolution_task": "S00-019",
|
||||
"agent": "auto-protocol-dcdf92cd067e",
|
||||
"role": "protocol",
|
||||
"from": "in_progress",
|
||||
"to": "blocked",
|
||||
"reason": "Stanza 12.22.1 browser HMAC sha-512 fails RFC 4231 Test Case 1: wrong 64-byte block selection. SCRAM-SHA-512 derives that hyphenated algorithm; private algorithm mutation/vendor patches are unsupported. Parent cannot attest browser strongest-mechanism compatibility from Node-only success."
|
||||
}
|
||||
],
|
||||
"retired_agents": [
|
||||
@@ -1857,6 +1888,7 @@
|
||||
"auto-qa-98b05bd56c25",
|
||||
"auto-ci-cd-5475930af078",
|
||||
"auto-protocol-826aa6bc12ef",
|
||||
"auto-protocol-902594b44429"
|
||||
"auto-protocol-902594b44429",
|
||||
"auto-protocol-dcdf92cd067e"
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user