Changes: Preserve incomplete work and blocker metadata for S00-022. This checkpoint does not mark implementation accepted. Validation: Session ended with status blocked. Blocker: Pinned libomemo.js@3.0.0 supplies real embedded WASM but is a different unaudited ratchet and excludes consumer SCE; no approved decision reconciles it with S00-022 retained audited engine/persistence requirement. Task: S00-022 Agent: auto-crypto-bcd7f2a71667 Role: crypto Action: claim Status: blocked Task title: Confirm or source a verified browser/WASM-capable OMEMO2 backend for the Web client endpoint
90 lines
5.6 KiB
Markdown
90 lines
5.6 KiB
Markdown
# S00-022 bounded candidate investigation — blocker
|
|
|
|
Agent: auto-crypto-bcd7f2a71667; role: crypto; date: 2026-10-15.
|
|
No backend accepted. No source, ADR, experiment, spec or shared contract changed.
|
|
|
|
## Inputs and commands
|
|
|
|
Read master_prompt/startup/role/workflow/Git documents, required TESTING, ADR index,
|
|
state/blockers/S00-022.md, current card, CLI packet, previous handoff, exact
|
|
ENC-003/009/011, accepted ADR 0000/0001 and existing 0002 decisions, direct dependency
|
|
executor/review evidence and handoffs. CLI resume/show/packet each exit 0, confirming
|
|
assigned in_progress owner; no repeated claim. Some large combined read outputs
|
|
were truncated. A final exploratory cat of state/blockers/S00-004.md exited 1:
|
|
that filename is absent; original S00-004 blocker is state/blockers/S00-022.md,
|
|
which was read successfully. No missing required task input is inferred from this.
|
|
|
|
`node experiments/0003-crypto-library/session-probe/wasm-unsupported.mjs`
|
|
exit 2: pkgPresent true, wasmFiles 0, six native prebuild platform directories,
|
|
UNSUPPORTED_BLOCKER. Existing libsignal-client package still supplies no web build.
|
|
The session smoke was not rerun; previous reviewed session/persistence evidence
|
|
is retained as historical evidence, not this run's successful check.
|
|
|
|
`npm view libomemo.js@3.0.0 version license repository dist.integrity dist.tarball time --json --fetch-retries=0 --fetch-timeout=15000 --cache=/tmp/luma-s00-022-bcd7-cache --strict-ssl=true`
|
|
exit 0: 3.0.0, GPL-3.0, conversejs/libomemo.js repository, published
|
|
2026-08-06T06:59:43.303Z. Metadata proves availability and release activity, not
|
|
maintenance SLA, audit, license approval or security suitability. Other package
|
|
E404 queries were not repeated: finding this concrete candidate already refutes
|
|
prior universal registry absence; enumerating guessed names cannot prove absence.
|
|
|
|
Inline Python urllib/ssl/hashlib/base64/tarfile/io inspection exit 0:
|
|
retrieved https://registry.npmjs.org/libomemo.js/-/libomemo.js-3.0.0.tgz with
|
|
ssl.create_default_context(), timeout 20, asserted HTTP 200 and unchanged final
|
|
HTTPS URL, verified SHA512 SRI against metadata. Read archive members in memory
|
|
with tarfile.extractfile; no filesystem extraction, install, scripts or package
|
|
execution. SRI agrees with registry; independent provenance is not established.
|
|
|
|
Archive: 1,061,939 bytes.
|
|
SHA256: be30116eca7014a35b3372dc1270d462cf5392ae6affc92c4f4778d003e7bbf8.
|
|
SRI: sha512-B4he9DOS+1LQrut+b2xjOjuSkKMAkZGes7ckB5JgVk/EHVNyxLIHx6NvQ3eJVaT1XeNJaWZBonXw3Nl5YKEbig==.
|
|
|
|
Pinned package.json declares ESM/UMD and worker-client exports, protobufjs ^8.0.0,
|
|
and GPL-3.0. Bundled LICENSE is 32,472 bytes (presence only; no distribution
|
|
license clearance claimed). dist/libomemo.esm.js is 519,611 bytes;
|
|
dist/libomemo-worker.js is 164,906; worker-client ESM 364,069.
|
|
Decoded data:application/octet-stream;base64 payloads in ESM, UMD and worker
|
|
variants: 85,585 bytes each, magic 0061736d, SHA256
|
|
3a32503ade92ed2bf522d49d51106a227dadb39c2a7b08a1023c216c7eec1286.
|
|
Thus searching only standalone .wasm files would miss this actual embedded asset.
|
|
Magic/size/hash inspection is not WebAssembly validation or browser execution.
|
|
|
|
Pinned README inspected from same archive: no formal third-party audit; implements
|
|
X3DH and Double Ratchet; consumer owns stanzas, PEP/device bundles and XEP-0420
|
|
SCE payload encryption. Claims legacy 0.3.0 and OMEMO2 0.9.1. Requires modern
|
|
ArrayBuffer/TypedArray/Promise/WebCrypto AES-CBC and HMAC-SHA256. Worker offloads
|
|
curve operations; this does not demonstrate whole crypto lifecycle in a worker.
|
|
Browser/worker failure policy and CSP need future independent evaluation.
|
|
|
|
Primary web pages opened: https://github.com/conversejs/libomemo.js and
|
|
https://xmpp.org/extensions/xep-0384.html. Current upstream README corroborates
|
|
these boundaries; pinned archive is authoritative for release inspection.
|
|
No XEP revision has been approved by this run; no SCE/key/MAC mapping or full
|
|
OMEMO2 known-answer browser roundtrip was executed. Self-roundtrip of ratchet
|
|
bytes alone would not prove ENC-011. No test is labeled passed for that outcome.
|
|
|
|
## Exact blocker and next input
|
|
|
|
Candidate is a different ratchet implementation, with explicit unaudited status
|
|
and consumer SCE gap. Existing native Signal session serialization/persistence
|
|
cannot be declared compatible with it. Card requires preserving the verified
|
|
audited engine/persistence, and no approved external backend strategy currently
|
|
bridges that condition. Authorizing a replacement/security assessment/migration
|
|
is an external architecture/security decision, not this executor's choice.
|
|
|
|
Request one recorded decision from architecture/security/product owner: supply
|
|
a maintained browser/WASM port of the retained engine with license/support and
|
|
SCE source path, OR authorize evaluation of a named alternative (libomemo.js
|
|
3.0.0 is a concrete candidate), with explicit independent security assessment,
|
|
license approval route and isolated persistence migration requirements. This
|
|
must not waive ENC-003/009/011 or declare the candidate audited/compatible.
|
|
A separately reviewed plan decision must adjust preservation wording if an
|
|
alternative is chosen before implementation proceeds. No homegrown primitives,
|
|
plaintext fallback or server decryption is an acceptable resolution.
|
|
|
|
No make check or application test was run: this run stopped at sourcing decision
|
|
blocker. ADR 0003 remains unchanged/proposed; its universal package-absence and
|
|
unsupported assertion that Signal has a WASM distribution are not established
|
|
by the cited E404. Fresh continuation should correct them from pinned evidence.
|
|
Git status initial read exit 0 showed only coordinator state/tasks.json claim.
|
|
Coordinator performs checkpoint commit; reporter ends after escalation.
|