@swal/edge-mesh 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +128 -0
- package/NOTICE +37 -0
- package/README.md +470 -2
- package/dist/adapters/gpu-agent/index.d.ts +61 -0
- package/dist/adapters/gpu-agent/index.d.ts.map +1 -0
- package/dist/adapters/gpu-agent/index.js +364 -0
- package/dist/adapters/gpu-agent/index.js.map +1 -0
- package/dist/adapters/maloca-salud/citas-distribuidas.d.ts +19 -0
- package/dist/adapters/maloca-salud/citas-distribuidas.d.ts.map +1 -0
- package/dist/adapters/maloca-salud/citas-distribuidas.js +51 -0
- package/dist/adapters/maloca-salud/citas-distribuidas.js.map +1 -0
- package/dist/adapters/maloca-salud/eps-bridge.d.ts +15 -0
- package/dist/adapters/maloca-salud/eps-bridge.d.ts.map +1 -0
- package/dist/adapters/maloca-salud/eps-bridge.js +27 -0
- package/dist/adapters/maloca-salud/eps-bridge.js.map +1 -0
- package/dist/adapters/maloca-salud/patient-profile.d.ts +20 -0
- package/dist/adapters/maloca-salud/patient-profile.d.ts.map +1 -0
- package/dist/adapters/maloca-salud/patient-profile.js +36 -0
- package/dist/adapters/maloca-salud/patient-profile.js.map +1 -0
- package/dist/adapters/maloca-salud/types.d.ts +40 -0
- package/dist/adapters/maloca-salud/types.d.ts.map +1 -0
- package/dist/adapters/maloca-salud/types.js +2 -0
- package/dist/adapters/maloca-salud/types.js.map +1 -0
- package/dist/adapters/maloca-veeduria/contract-bridge.d.ts +31 -0
- package/dist/adapters/maloca-veeduria/contract-bridge.d.ts.map +1 -0
- package/dist/adapters/maloca-veeduria/contract-bridge.js +103 -0
- package/dist/adapters/maloca-veeduria/contract-bridge.js.map +1 -0
- package/dist/adapters/maloca-veeduria/evidentia-veeduria.d.ts +14 -0
- package/dist/adapters/maloca-veeduria/evidentia-veeduria.d.ts.map +1 -0
- package/dist/adapters/maloca-veeduria/evidentia-veeduria.js +40 -0
- package/dist/adapters/maloca-veeduria/evidentia-veeduria.js.map +1 -0
- package/dist/adapters/maloca-veeduria/licitante-profile.d.ts +21 -0
- package/dist/adapters/maloca-veeduria/licitante-profile.d.ts.map +1 -0
- package/dist/adapters/maloca-veeduria/licitante-profile.js +58 -0
- package/dist/adapters/maloca-veeduria/licitante-profile.js.map +1 -0
- package/dist/adapters/maloca-veeduria/types.d.ts +30 -0
- package/dist/adapters/maloca-veeduria/types.d.ts.map +1 -0
- package/dist/adapters/maloca-veeduria/types.js +2 -0
- package/dist/adapters/maloca-veeduria/types.js.map +1 -0
- package/dist/adapters/maloca-xavier/agent-profile.d.ts +32 -0
- package/dist/adapters/maloca-xavier/agent-profile.d.ts.map +1 -0
- package/dist/adapters/maloca-xavier/agent-profile.js +56 -0
- package/dist/adapters/maloca-xavier/agent-profile.js.map +1 -0
- package/dist/adapters/maloca-xavier/codegraph-bridge.d.ts +27 -0
- package/dist/adapters/maloca-xavier/codegraph-bridge.d.ts.map +1 -0
- package/dist/adapters/maloca-xavier/codegraph-bridge.js +58 -0
- package/dist/adapters/maloca-xavier/codegraph-bridge.js.map +1 -0
- package/dist/adapters/maloca-xavier/llm-router.d.ts +25 -0
- package/dist/adapters/maloca-xavier/llm-router.d.ts.map +1 -0
- package/dist/adapters/maloca-xavier/llm-router.js +58 -0
- package/dist/adapters/maloca-xavier/llm-router.js.map +1 -0
- package/dist/authz/index.d.ts +81 -0
- package/dist/authz/index.d.ts.map +1 -0
- package/dist/authz/index.js +271 -0
- package/dist/authz/index.js.map +1 -0
- package/dist/chat/index.d.ts +138 -0
- package/dist/chat/index.d.ts.map +1 -0
- package/dist/chat/index.js +394 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/offline-queue.d.ts +32 -0
- package/dist/chat/offline-queue.d.ts.map +1 -0
- package/dist/chat/offline-queue.js +93 -0
- package/dist/chat/offline-queue.js.map +1 -0
- package/dist/core/DefaultEdgeMeshNode.d.ts +17 -0
- package/dist/core/DefaultEdgeMeshNode.d.ts.map +1 -0
- package/dist/core/DefaultEdgeMeshNode.js +57 -0
- package/dist/core/DefaultEdgeMeshNode.js.map +1 -0
- package/dist/core/node.d.ts +26 -0
- package/dist/core/node.d.ts.map +1 -0
- package/dist/core/node.js +16 -0
- package/dist/core/node.js.map +1 -0
- package/dist/edge-mesh.d.ts +139 -0
- package/dist/edge-mesh.d.ts.map +1 -0
- package/dist/edge-mesh.js +1146 -0
- package/dist/edge-mesh.js.map +1 -0
- package/dist/gos/GosBridge.d.ts +49 -0
- package/dist/gos/GosBridge.d.ts.map +1 -0
- package/dist/gos/GosBridge.js +133 -0
- package/dist/gos/GosBridge.js.map +1 -0
- package/dist/governance/authority.d.ts +44 -0
- package/dist/governance/authority.d.ts.map +1 -0
- package/dist/governance/authority.js +123 -0
- package/dist/governance/authority.js.map +1 -0
- package/dist/governance/index.d.ts +66 -0
- package/dist/governance/index.d.ts.map +1 -0
- package/dist/governance/index.js +210 -0
- package/dist/governance/index.js.map +1 -0
- package/dist/governance/merge.d.ts +31 -0
- package/dist/governance/merge.d.ts.map +1 -0
- package/dist/governance/merge.js +167 -0
- package/dist/governance/merge.js.map +1 -0
- package/dist/identity/index.d.ts +199 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +415 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/index.d.ts +71 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/maloca/backoffice.d.ts +31 -0
- package/dist/maloca/backoffice.d.ts.map +1 -0
- package/dist/maloca/backoffice.js +40 -0
- package/dist/maloca/backoffice.js.map +1 -0
- package/dist/maloca/event-bus.d.ts +60 -0
- package/dist/maloca/event-bus.d.ts.map +1 -0
- package/dist/maloca/event-bus.js +175 -0
- package/dist/maloca/event-bus.js.map +1 -0
- package/dist/maloca/evidentia.d.ts +136 -0
- package/dist/maloca/evidentia.d.ts.map +1 -0
- package/dist/maloca/evidentia.js +447 -0
- package/dist/maloca/evidentia.js.map +1 -0
- package/dist/maloca/gateway/api.d.ts +146 -0
- package/dist/maloca/gateway/api.d.ts.map +1 -0
- package/dist/maloca/gateway/api.js +228 -0
- package/dist/maloca/gateway/api.js.map +1 -0
- package/dist/maloca/gateway/auth.d.ts +20 -0
- package/dist/maloca/gateway/auth.d.ts.map +1 -0
- package/dist/maloca/gateway/auth.js +115 -0
- package/dist/maloca/gateway/auth.js.map +1 -0
- package/dist/maloca/gateway/dashboard.d.ts +42 -0
- package/dist/maloca/gateway/dashboard.d.ts.map +1 -0
- package/dist/maloca/gateway/dashboard.js +67 -0
- package/dist/maloca/gateway/dashboard.js.map +1 -0
- package/dist/maloca/gateway/websocket.d.ts +34 -0
- package/dist/maloca/gateway/websocket.d.ts.map +1 -0
- package/dist/maloca/gateway/websocket.js +71 -0
- package/dist/maloca/gateway/websocket.js.map +1 -0
- package/dist/maloca/karma.d.ts +165 -0
- package/dist/maloca/karma.d.ts.map +1 -0
- package/dist/maloca/karma.js +307 -0
- package/dist/maloca/karma.js.map +1 -0
- package/dist/maloca/kernel.d.ts +20 -0
- package/dist/maloca/kernel.d.ts.map +1 -0
- package/dist/maloca/kernel.js +76 -0
- package/dist/maloca/kernel.js.map +1 -0
- package/dist/maloca/metadata.d.ts +30 -0
- package/dist/maloca/metadata.d.ts.map +1 -0
- package/dist/maloca/metadata.js +80 -0
- package/dist/maloca/metadata.js.map +1 -0
- package/dist/maloca/perfil.d.ts +57 -0
- package/dist/maloca/perfil.d.ts.map +1 -0
- package/dist/maloca/perfil.js +113 -0
- package/dist/maloca/perfil.js.map +1 -0
- package/dist/maloca/plugin-registry.d.ts +27 -0
- package/dist/maloca/plugin-registry.d.ts.map +1 -0
- package/dist/maloca/plugin-registry.js +76 -0
- package/dist/maloca/plugin-registry.js.map +1 -0
- package/dist/maloca/polygon-bridge.d.ts +63 -0
- package/dist/maloca/polygon-bridge.d.ts.map +1 -0
- package/dist/maloca/polygon-bridge.js +198 -0
- package/dist/maloca/polygon-bridge.js.map +1 -0
- package/dist/maloca/types.d.ts +44 -0
- package/dist/maloca/types.d.ts.map +1 -0
- package/dist/maloca/types.js +2 -0
- package/dist/maloca/types.js.map +1 -0
- package/dist/medico/aval.d.ts +149 -0
- package/dist/medico/aval.d.ts.map +1 -0
- package/dist/medico/aval.js +281 -0
- package/dist/medico/aval.js.map +1 -0
- package/dist/medico/canonica.d.ts +96 -0
- package/dist/medico/canonica.d.ts.map +1 -0
- package/dist/medico/canonica.js +148 -0
- package/dist/medico/canonica.js.map +1 -0
- package/dist/medico/credencial.d.ts +160 -0
- package/dist/medico/credencial.d.ts.map +1 -0
- package/dist/medico/credencial.js +240 -0
- package/dist/medico/credencial.js.map +1 -0
- package/dist/medico/index.d.ts +36 -0
- package/dist/medico/index.d.ts.map +1 -0
- package/dist/medico/index.js +39 -0
- package/dist/medico/index.js.map +1 -0
- package/dist/medico/malla.d.ts +218 -0
- package/dist/medico/malla.d.ts.map +1 -0
- package/dist/medico/malla.js +347 -0
- package/dist/medico/malla.js.map +1 -0
- package/dist/medico/registro-profesional.d.ts +84 -0
- package/dist/medico/registro-profesional.d.ts.map +1 -0
- package/dist/medico/registro-profesional.js +135 -0
- package/dist/medico/registro-profesional.js.map +1 -0
- package/dist/medico/registro.d.ts +149 -0
- package/dist/medico/registro.d.ts.map +1 -0
- package/dist/medico/registro.js +173 -0
- package/dist/medico/registro.js.map +1 -0
- package/dist/medico/types.d.ts +287 -0
- package/dist/medico/types.d.ts.map +1 -0
- package/dist/medico/types.js +135 -0
- package/dist/medico/types.js.map +1 -0
- package/dist/medico/verificacion-registro.d.ts +300 -0
- package/dist/medico/verificacion-registro.d.ts.map +1 -0
- package/dist/medico/verificacion-registro.js +319 -0
- package/dist/medico/verificacion-registro.js.map +1 -0
- package/dist/mesh/index.d.ts +457 -0
- package/dist/mesh/index.d.ts.map +1 -0
- package/dist/mesh/index.js +929 -0
- package/dist/mesh/index.js.map +1 -0
- package/dist/namespaces/encrypted-plugin.d.ts +56 -0
- package/dist/namespaces/encrypted-plugin.d.ts.map +1 -0
- package/dist/namespaces/encrypted-plugin.js +173 -0
- package/dist/namespaces/encrypted-plugin.js.map +1 -0
- package/dist/namespaces/index.d.ts +52 -0
- package/dist/namespaces/index.d.ts.map +1 -0
- package/dist/namespaces/index.js +134 -0
- package/dist/namespaces/index.js.map +1 -0
- package/dist/namespaces/ivn-proofs.d.ts +54 -0
- package/dist/namespaces/ivn-proofs.d.ts.map +1 -0
- package/dist/namespaces/ivn-proofs.js +162 -0
- package/dist/namespaces/ivn-proofs.js.map +1 -0
- package/dist/namespaces/offers-gossip.d.ts +95 -0
- package/dist/namespaces/offers-gossip.d.ts.map +1 -0
- package/dist/namespaces/offers-gossip.js +213 -0
- package/dist/namespaces/offers-gossip.js.map +1 -0
- package/dist/node-memory/idb-store.d.ts +22 -0
- package/dist/node-memory/idb-store.d.ts.map +1 -0
- package/dist/node-memory/idb-store.js +154 -0
- package/dist/node-memory/idb-store.js.map +1 -0
- package/dist/node-memory/index.d.ts +14 -0
- package/dist/node-memory/index.d.ts.map +1 -0
- package/dist/node-memory/index.js +159 -0
- package/dist/node-memory/index.js.map +1 -0
- package/dist/node-memory/sync-flush.d.ts +11 -0
- package/dist/node-memory/sync-flush.d.ts.map +1 -0
- package/dist/node-memory/sync-flush.js +37 -0
- package/dist/node-memory/sync-flush.js.map +1 -0
- package/dist/node-memory/types.d.ts +34 -0
- package/dist/node-memory/types.d.ts.map +1 -0
- package/dist/node-memory/types.js +2 -0
- package/dist/node-memory/types.js.map +1 -0
- package/dist/node-memory/xavier-store.d.ts +12 -0
- package/dist/node-memory/xavier-store.d.ts.map +1 -0
- package/dist/node-memory/xavier-store.js +75 -0
- package/dist/node-memory/xavier-store.js.map +1 -0
- package/dist/op-log/index.d.ts +49 -0
- package/dist/op-log/index.d.ts.map +1 -0
- package/dist/op-log/index.js +190 -0
- package/dist/op-log/index.js.map +1 -0
- package/dist/presence/health.d.ts +54 -0
- package/dist/presence/health.d.ts.map +1 -0
- package/dist/presence/health.js +139 -0
- package/dist/presence/health.js.map +1 -0
- package/dist/presence/index.d.ts +85 -0
- package/dist/presence/index.d.ts.map +1 -0
- package/dist/presence/index.js +255 -0
- package/dist/presence/index.js.map +1 -0
- package/dist/presence/peer-health.d.ts +40 -0
- package/dist/presence/peer-health.d.ts.map +1 -0
- package/dist/presence/peer-health.js +118 -0
- package/dist/presence/peer-health.js.map +1 -0
- package/dist/protocol/canonical.d.ts +10 -0
- package/dist/protocol/canonical.d.ts.map +1 -0
- package/dist/protocol/canonical.js +32 -0
- package/dist/protocol/canonical.js.map +1 -0
- package/dist/protocol/crypto.d.ts +299 -0
- package/dist/protocol/crypto.d.ts.map +1 -0
- package/dist/protocol/crypto.js +739 -0
- package/dist/protocol/crypto.js.map +1 -0
- package/dist/protocol/index.d.ts +30 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +116 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/protocol/utils.d.ts +5 -0
- package/dist/protocol/utils.d.ts.map +1 -0
- package/dist/protocol/utils.js +27 -0
- package/dist/protocol/utils.js.map +1 -0
- package/dist/salones/manager.d.ts +100 -0
- package/dist/salones/manager.d.ts.map +1 -0
- package/dist/salones/manager.js +240 -0
- package/dist/salones/manager.js.map +1 -0
- package/dist/security/rate-limiter.d.ts +13 -0
- package/dist/security/rate-limiter.d.ts.map +1 -0
- package/dist/security/rate-limiter.js +32 -0
- package/dist/security/rate-limiter.js.map +1 -0
- package/dist/snapshot/index.d.ts +90 -0
- package/dist/snapshot/index.d.ts.map +1 -0
- package/dist/snapshot/index.js +189 -0
- package/dist/snapshot/index.js.map +1 -0
- package/dist/storage/index.d.ts +49 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +176 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/optimizer.d.ts +28 -0
- package/dist/storage/optimizer.d.ts.map +1 -0
- package/dist/storage/optimizer.js +50 -0
- package/dist/storage/optimizer.js.map +1 -0
- package/dist/storage/ydoc-persistence.d.ts +27 -0
- package/dist/storage/ydoc-persistence.d.ts.map +1 -0
- package/dist/storage/ydoc-persistence.js +128 -0
- package/dist/storage/ydoc-persistence.js.map +1 -0
- package/dist/sync/ChunkSyncManager.d.ts +41 -0
- package/dist/sync/ChunkSyncManager.d.ts.map +1 -0
- package/dist/sync/ChunkSyncManager.js +115 -0
- package/dist/sync/ChunkSyncManager.js.map +1 -0
- package/dist/sync/conflict-resolver.d.ts +33 -0
- package/dist/sync/conflict-resolver.d.ts.map +1 -0
- package/dist/sync/conflict-resolver.js +54 -0
- package/dist/sync/conflict-resolver.js.map +1 -0
- package/dist/sync/engine.d.ts +168 -0
- package/dist/sync/engine.d.ts.map +1 -0
- package/dist/sync/engine.js +315 -0
- package/dist/sync/engine.js.map +1 -0
- package/dist/sync/index.d.ts +3 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +3 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/transport/TorTransportAdapter.d.ts +70 -0
- package/dist/transport/TorTransportAdapter.d.ts.map +1 -0
- package/dist/transport/TorTransportAdapter.js +192 -0
- package/dist/transport/TorTransportAdapter.js.map +1 -0
- package/dist/transport/memory.d.ts +31 -0
- package/dist/transport/memory.d.ts.map +1 -0
- package/dist/transport/memory.js +114 -0
- package/dist/transport/memory.js.map +1 -0
- package/dist/transport/peerjs.d.ts +45 -0
- package/dist/transport/peerjs.d.ts.map +1 -0
- package/dist/transport/peerjs.js +301 -0
- package/dist/transport/peerjs.js.map +1 -0
- package/dist/transport/pqc-handshake.d.ts +72 -0
- package/dist/transport/pqc-handshake.d.ts.map +1 -0
- package/dist/transport/pqc-handshake.js +129 -0
- package/dist/transport/pqc-handshake.js.map +1 -0
- package/dist/transport/relay-config.d.ts +11 -0
- package/dist/transport/relay-config.d.ts.map +1 -0
- package/dist/transport/relay-config.js +48 -0
- package/dist/transport/relay-config.js.map +1 -0
- package/dist/transport/relay-server.d.ts +37 -0
- package/dist/transport/relay-server.d.ts.map +1 -0
- package/dist/transport/relay-server.js +230 -0
- package/dist/transport/relay-server.js.map +1 -0
- package/dist/transport/tor.d.ts +47 -0
- package/dist/transport/tor.d.ts.map +1 -0
- package/dist/transport/tor.js +158 -0
- package/dist/transport/tor.js.map +1 -0
- package/dist/transport/types.d.ts +34 -0
- package/dist/transport/types.d.ts.map +1 -0
- package/dist/transport/types.js +2 -0
- package/dist/transport/types.js.map +1 -0
- package/dist/types/index.d.ts +293 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +73 -0
- package/dist/types/index.js.map +1 -0
- package/dist/web/admission.d.ts +24 -0
- package/dist/web/admission.d.ts.map +1 -0
- package/dist/web/admission.js +41 -0
- package/dist/web/admission.js.map +1 -0
- package/dist/web/crypto.d.ts +18 -0
- package/dist/web/crypto.d.ts.map +1 -0
- package/dist/web/crypto.js +78 -0
- package/dist/web/crypto.js.map +1 -0
- package/dist/web/exchange.d.ts +23 -0
- package/dist/web/exchange.d.ts.map +1 -0
- package/dist/web/exchange.js +54 -0
- package/dist/web/exchange.js.map +1 -0
- package/dist/web/fragment.d.ts +58 -0
- package/dist/web/fragment.d.ts.map +1 -0
- package/dist/web/fragment.js +198 -0
- package/dist/web/fragment.js.map +1 -0
- package/dist/web/index.d.ts +25 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +14 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/merge/index.d.ts +104 -0
- package/dist/web/merge/index.d.ts.map +1 -0
- package/dist/web/merge/index.js +236 -0
- package/dist/web/merge/index.js.map +1 -0
- package/dist/web/oplog/hlc.d.ts +19 -0
- package/dist/web/oplog/hlc.d.ts.map +1 -0
- package/dist/web/oplog/hlc.js +39 -0
- package/dist/web/oplog/hlc.js.map +1 -0
- package/dist/web/oplog/index.d.ts +10 -0
- package/dist/web/oplog/index.d.ts.map +1 -0
- package/dist/web/oplog/index.js +6 -0
- package/dist/web/oplog/index.js.map +1 -0
- package/dist/web/oplog/log.d.ts +182 -0
- package/dist/web/oplog/log.d.ts.map +1 -0
- package/dist/web/oplog/log.js +693 -0
- package/dist/web/oplog/log.js.map +1 -0
- package/dist/web/oplog/store.d.ts +40 -0
- package/dist/web/oplog/store.d.ts.map +1 -0
- package/dist/web/oplog/store.js +85 -0
- package/dist/web/oplog/store.js.map +1 -0
- package/dist/web/oplog/sync.d.ts +54 -0
- package/dist/web/oplog/sync.d.ts.map +1 -0
- package/dist/web/oplog/sync.js +162 -0
- package/dist/web/oplog/sync.js.map +1 -0
- package/dist/web/oplog/types.d.ts +119 -0
- package/dist/web/oplog/types.d.ts.map +1 -0
- package/dist/web/oplog/types.js +2 -0
- package/dist/web/oplog/types.js.map +1 -0
- package/dist/web/pairing.d.ts +186 -0
- package/dist/web/pairing.d.ts.map +1 -0
- package/dist/web/pairing.js +395 -0
- package/dist/web/pairing.js.map +1 -0
- package/dist/web/pq.d.ts +36 -0
- package/dist/web/pq.d.ts.map +1 -0
- package/dist/web/pq.js +59 -0
- package/dist/web/pq.js.map +1 -0
- package/dist/web/provider.d.ts +188 -0
- package/dist/web/provider.d.ts.map +1 -0
- package/dist/web/provider.js +2042 -0
- package/dist/web/provider.js.map +1 -0
- package/dist/web/rooms.d.ts +20 -0
- package/dist/web/rooms.d.ts.map +1 -0
- package/dist/web/rooms.js +51 -0
- package/dist/web/rooms.js.map +1 -0
- package/dist/web/rotation.d.ts +73 -0
- package/dist/web/rotation.d.ts.map +1 -0
- package/dist/web/rotation.js +130 -0
- package/dist/web/rotation.js.map +1 -0
- package/dist/web/secstate.d.ts +213 -0
- package/dist/web/secstate.d.ts.map +1 -0
- package/dist/web/secstate.js +789 -0
- package/dist/web/secstate.js.map +1 -0
- package/dist/web/store.d.ts +9 -0
- package/dist/web/store.d.ts.map +1 -0
- package/dist/web/store.js +32 -0
- package/dist/web/store.js.map +1 -0
- package/dist/web/transports/loopback.d.ts +11 -0
- package/dist/web/transports/loopback.d.ts.map +1 -0
- package/dist/web/transports/loopback.js +97 -0
- package/dist/web/transports/loopback.js.map +1 -0
- package/dist/web/transports/qr-sdp.d.ts +27 -0
- package/dist/web/transports/qr-sdp.d.ts.map +1 -0
- package/dist/web/transports/qr-sdp.js +131 -0
- package/dist/web/transports/qr-sdp.js.map +1 -0
- package/dist/web/transports/ws.d.ts +12 -0
- package/dist/web/transports/ws.d.ts.map +1 -0
- package/dist/web/transports/ws.js +139 -0
- package/dist/web/transports/ws.js.map +1 -0
- package/dist/web/trust/canonical.d.ts +8 -0
- package/dist/web/trust/canonical.d.ts.map +1 -0
- package/dist/web/trust/canonical.js +27 -0
- package/dist/web/trust/canonical.js.map +1 -0
- package/dist/web/trust/docs.d.ts +51 -0
- package/dist/web/trust/docs.d.ts.map +1 -0
- package/dist/web/trust/docs.js +170 -0
- package/dist/web/trust/docs.js.map +1 -0
- package/dist/web/trust/index.d.ts +10 -0
- package/dist/web/trust/index.d.ts.map +1 -0
- package/dist/web/trust/index.js +7 -0
- package/dist/web/trust/index.js.map +1 -0
- package/dist/web/trust/keys.d.ts +37 -0
- package/dist/web/trust/keys.d.ts.map +1 -0
- package/dist/web/trust/keys.js +75 -0
- package/dist/web/trust/keys.js.map +1 -0
- package/dist/web/trust/store.d.ts +150 -0
- package/dist/web/trust/store.d.ts.map +1 -0
- package/dist/web/trust/store.js +587 -0
- package/dist/web/trust/store.js.map +1 -0
- package/dist/web/trust/types.d.ts +134 -0
- package/dist/web/trust/types.d.ts.map +1 -0
- package/dist/web/trust/types.js +4 -0
- package/dist/web/trust/types.js.map +1 -0
- package/dist/web/types.d.ts +115 -0
- package/dist/web/types.d.ts.map +1 -0
- package/dist/web/types.js +2 -0
- package/dist/web/types.js.map +1 -0
- package/dist/web/util.d.ts +12 -0
- package/dist/web/util.d.ts.map +1 -0
- package/dist/web/util.js +54 -0
- package/dist/web/util.js.map +1 -0
- package/dist/web/webrtc.d.ts +35 -0
- package/dist/web/webrtc.d.ts.map +1 -0
- package/dist/web/webrtc.js +304 -0
- package/dist/web/webrtc.js.map +1 -0
- package/package.json +138 -4
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { type TrustRoot } from "./admission.js";
|
|
2
|
+
import type { Device, VaultClient } from "./types.js";
|
|
3
|
+
export declare const PAIR_TTL_MS: number;
|
|
4
|
+
/**
|
|
5
|
+
* QR payload v4. Wire form = base64url(JSON array [4, mid, appId, topic, hostPub, hostId, pairSecret, exp, root]);
|
|
6
|
+
* ~300 raw bytes (an ML-DSA-65 key and signature, ~7 KB in base64url, would not fit a scannable QR).
|
|
7
|
+
* `hostPub`: host ephemeral ECDH P-256 key (raw, 65B). `hostId`: deviceId (= fingerprint of the ML-DSA-65 identity
|
|
8
|
+
* key) of the host; the host proves that identity inside the SAS-authenticated session (`GrantBody.hostProof`, a
|
|
9
|
+
* signature over the transcript). `root`: deviceId of the mesh owner (S6). The QR itself is the out-of-band channel.
|
|
10
|
+
*/
|
|
11
|
+
export interface PairPayload {
|
|
12
|
+
v: 4;
|
|
13
|
+
mid: string;
|
|
14
|
+
root: string;
|
|
15
|
+
appId: string;
|
|
16
|
+
topic: string;
|
|
17
|
+
hostPub: string;
|
|
18
|
+
hostId: string;
|
|
19
|
+
pairSecret: string;
|
|
20
|
+
exp: number;
|
|
21
|
+
}
|
|
22
|
+
export interface GrantBody {
|
|
23
|
+
meshKey: string;
|
|
24
|
+
epoch: number;
|
|
25
|
+
mid: string;
|
|
26
|
+
hostDevice?: Device;
|
|
27
|
+
/** The host's ML-DSA-65 identity key and its signature over the pairing transcript (`hostProofBytes`). */
|
|
28
|
+
hostProof?: {
|
|
29
|
+
pub: string;
|
|
30
|
+
sig: string;
|
|
31
|
+
};
|
|
32
|
+
/** Trust anchor the guest pins (the mesh owner), sent over the SAS-authenticated session. */
|
|
33
|
+
root?: TrustRoot;
|
|
34
|
+
/**
|
|
35
|
+
* Security documents for the guest (round 5): its own grant, the issuer's grant chain up to (excluding) the root, the
|
|
36
|
+
* key-agreement records of the host and the owner, and the rotation that produced `meshKey` when known. Everything
|
|
37
|
+
* else arrives over the trust channel once the guest is in.
|
|
38
|
+
*/
|
|
39
|
+
docs?: unknown[];
|
|
40
|
+
/** id of the rotation that produced `meshKey` (B4: same-epoch rotations are resolved by id) */
|
|
41
|
+
rotId?: string;
|
|
42
|
+
/** Application data attached by the host for this guest (MeshOptions pairHost({ extra })). */
|
|
43
|
+
extra?: unknown;
|
|
44
|
+
}
|
|
45
|
+
export declare function encodePairPayload(p: PairPayload): string;
|
|
46
|
+
export declare function decodePairPayload(s: string): PairPayload;
|
|
47
|
+
export declare function derivePairKey(pairSecret: Uint8Array): Promise<CryptoKey>;
|
|
48
|
+
export interface PairOfferState {
|
|
49
|
+
payload: PairPayload;
|
|
50
|
+
encoded: string;
|
|
51
|
+
pairSecret: Uint8Array;
|
|
52
|
+
hostKeys: CryptoKeyPair;
|
|
53
|
+
}
|
|
54
|
+
export declare function createPairOffer(vault: VaultClient, o: {
|
|
55
|
+
mid: string;
|
|
56
|
+
root: string;
|
|
57
|
+
appId: string;
|
|
58
|
+
topic: string;
|
|
59
|
+
now: number;
|
|
60
|
+
ttlMs?: number;
|
|
61
|
+
}): Promise<PairOfferState>;
|
|
62
|
+
/** What the host signs with its identity key: the transcript, its id and key (inside the encrypted grant). */
|
|
63
|
+
export declare const hostProofBytes: (transcript: Uint8Array, hostId: string, pub: string) => Uint8Array<ArrayBufferLike>;
|
|
64
|
+
/** Guest-side check of the host's identity proof: hostId (from the QR) = fingerprint(pub) and a valid ML-DSA-65 signature. */
|
|
65
|
+
export declare function verifyHostProof(p: PairPayload, transcript: Uint8Array, proof: unknown): Promise<boolean>;
|
|
66
|
+
/**
|
|
67
|
+
* Pairing transcript hash: binds the SAS and the session key to BOTH ephemeral ECDH keys, the guest's ephemeral
|
|
68
|
+
* ML-KEM-768 encapsulation key and the host's ciphertext to it, BOTH nonces (host: pairSecret from the QR; guest:
|
|
69
|
+
* fresh `n` in its hello), the host identity (its id) and the mesh/app/topic.
|
|
70
|
+
*/
|
|
71
|
+
export declare function pairTranscript(p: PairPayload, guestPub: string, guestNonce: string, guestKem: string, kemCt: string): Promise<Uint8Array>;
|
|
72
|
+
/**
|
|
73
|
+
* 6-digit Short Authentication String: HKDF(ikm = ML-KEM secret || ECDH secret, salt = transcript hash), 40 bits
|
|
74
|
+
* mod 10^6. A man in the middle must replace the ECDH key or the KEM ciphertext, which changes the code.
|
|
75
|
+
*/
|
|
76
|
+
export declare function sasCode(shared: Uint8Array, transcript: Uint8Array): Promise<string>;
|
|
77
|
+
/**
|
|
78
|
+
* What the guest signs with its IDENTITY key inside the ack: proof of possession of the key it asks to be admitted
|
|
79
|
+
* with, bound to this pairing session (transcript) so it cannot be replayed into another one.
|
|
80
|
+
*/
|
|
81
|
+
export declare const ackSignedBytes: (transcript: Uint8Array, deviceId: string, pub: string, name: string) => Uint8Array<ArrayBufferLike>;
|
|
82
|
+
export interface PairAck {
|
|
83
|
+
deviceId: string;
|
|
84
|
+
pub: string;
|
|
85
|
+
name: string;
|
|
86
|
+
sig: string;
|
|
87
|
+
}
|
|
88
|
+
/** Host-side check of a guest ack: deviceId = fingerprint(pub) and a valid signature by that key over the transcript. */
|
|
89
|
+
export declare function verifyPairAck(verify: (pub: Uint8Array, data: Uint8Array, sig: Uint8Array) => boolean | Promise<boolean>, transcript: Uint8Array, a: Partial<PairAck>): Promise<string | null>;
|
|
90
|
+
type Msg =
|
|
91
|
+
/** e: guest ephemeral ECDH key, n: guest nonce, k: guest ephemeral ML-KEM-768 encapsulation key, p: proof */
|
|
92
|
+
{
|
|
93
|
+
t: "hello";
|
|
94
|
+
e: string;
|
|
95
|
+
n: string;
|
|
96
|
+
k: string;
|
|
97
|
+
p: string;
|
|
98
|
+
}
|
|
99
|
+
/** c: host's ML-KEM-768 ciphertext to `k` */
|
|
100
|
+
| {
|
|
101
|
+
t: "ready";
|
|
102
|
+
c: string;
|
|
103
|
+
} | {
|
|
104
|
+
t: "ack";
|
|
105
|
+
ct: string;
|
|
106
|
+
} | {
|
|
107
|
+
t: "grant";
|
|
108
|
+
ct: string;
|
|
109
|
+
} | {
|
|
110
|
+
t: "abort";
|
|
111
|
+
} | {
|
|
112
|
+
t: "err";
|
|
113
|
+
e: string;
|
|
114
|
+
};
|
|
115
|
+
export type PairSend = (m: Msg) => void;
|
|
116
|
+
export interface SasPrompt {
|
|
117
|
+
code: string;
|
|
118
|
+
confirm(): void;
|
|
119
|
+
reject(): void;
|
|
120
|
+
}
|
|
121
|
+
/** Host side. One instance per offer. pairSecret is single-use: burned by the first valid hello. */
|
|
122
|
+
export declare class HostPairing {
|
|
123
|
+
private offer;
|
|
124
|
+
private hooks;
|
|
125
|
+
private burned;
|
|
126
|
+
private done;
|
|
127
|
+
private sess;
|
|
128
|
+
private transcript;
|
|
129
|
+
private hostOk;
|
|
130
|
+
private guestDevice;
|
|
131
|
+
private send;
|
|
132
|
+
constructor(offer: PairOfferState, hooks: {
|
|
133
|
+
now(): number;
|
|
134
|
+
/** identity-signature check (the host vault's verify) for the guest's proof of possession */
|
|
135
|
+
verify(pub: Uint8Array, data: Uint8Array, sig: Uint8Array): boolean | Promise<boolean>;
|
|
136
|
+
/** the host's identity proof over the transcript (see `hostProofBytes`) */
|
|
137
|
+
prove(transcript: Uint8Array): Promise<{
|
|
138
|
+
pub: string;
|
|
139
|
+
sig: string;
|
|
140
|
+
}>;
|
|
141
|
+
onSas(p: SasPrompt): void;
|
|
142
|
+
buildGrant(guest: Omit<Device, "addedAt">): Promise<GrantBody>;
|
|
143
|
+
onPaired(d: Device): void;
|
|
144
|
+
onFail(reason: string): void;
|
|
145
|
+
});
|
|
146
|
+
get expired(): boolean;
|
|
147
|
+
get finished(): boolean;
|
|
148
|
+
cancel(): void;
|
|
149
|
+
handle(msg: Msg, send: PairSend): Promise<void>;
|
|
150
|
+
private fail;
|
|
151
|
+
private onHello;
|
|
152
|
+
private onAck;
|
|
153
|
+
private tryGrant;
|
|
154
|
+
}
|
|
155
|
+
/** Guest side. */
|
|
156
|
+
export declare class GuestPairing {
|
|
157
|
+
readonly payload: PairPayload;
|
|
158
|
+
private vault;
|
|
159
|
+
private hooks;
|
|
160
|
+
private sess;
|
|
161
|
+
private transcript;
|
|
162
|
+
private ePub;
|
|
163
|
+
private nonce;
|
|
164
|
+
private kemPub;
|
|
165
|
+
private kemSecret;
|
|
166
|
+
private ecdhSecret;
|
|
167
|
+
private proof;
|
|
168
|
+
private sent;
|
|
169
|
+
private settled;
|
|
170
|
+
readonly result: Promise<GrantBody>;
|
|
171
|
+
private resolve;
|
|
172
|
+
private reject;
|
|
173
|
+
private active;
|
|
174
|
+
private constructor();
|
|
175
|
+
static create(payload: PairPayload, vault: VaultClient, hooks: {
|
|
176
|
+
name: string;
|
|
177
|
+
onSas(code: string): Promise<boolean>;
|
|
178
|
+
now: number;
|
|
179
|
+
}): Promise<GuestPairing>;
|
|
180
|
+
/** Called for every new link in the pairing room; says hello over it. */
|
|
181
|
+
attach(send: PairSend): void;
|
|
182
|
+
fail(e: Error): void;
|
|
183
|
+
handle(msg: Msg, send: PairSend): Promise<void>;
|
|
184
|
+
}
|
|
185
|
+
export {};
|
|
186
|
+
//# sourceMappingURL=pairing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairing.d.ts","sourceRoot":"","sources":["../../src/web/pairing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
import { idMatchesPub } from "./admission.js";
|
|
2
|
+
import { hkdf, importAesKey, openUpdate, sealUpdate } from "./crypto.js";
|
|
3
|
+
import { hybridSecret, identityVerify, kemDecapsulate, kemEncapsulate, kemKeygen, } from "./pq.js";
|
|
4
|
+
import { hmac } from "./rooms.js";
|
|
5
|
+
import { b64uDecode, b64uEncode, bs, concat, equalBytes, fromUtf8, randomBytes, utf8, } from "./util.js";
|
|
6
|
+
export const PAIR_TTL_MS = 5 * 60_000;
|
|
7
|
+
const ECDH = { name: "ECDH", namedCurve: "P-256" };
|
|
8
|
+
export function encodePairPayload(p) {
|
|
9
|
+
return b64uEncode(utf8(JSON.stringify([
|
|
10
|
+
p.v,
|
|
11
|
+
p.mid,
|
|
12
|
+
p.appId,
|
|
13
|
+
p.topic,
|
|
14
|
+
p.hostPub,
|
|
15
|
+
p.hostId,
|
|
16
|
+
p.pairSecret,
|
|
17
|
+
p.exp,
|
|
18
|
+
p.root,
|
|
19
|
+
])));
|
|
20
|
+
}
|
|
21
|
+
export function decodePairPayload(s) {
|
|
22
|
+
let a;
|
|
23
|
+
try {
|
|
24
|
+
a = JSON.parse(fromUtf8(b64uDecode(s.trim())));
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
throw new Error("invalid pairing payload");
|
|
28
|
+
}
|
|
29
|
+
if (!Array.isArray(a) || a.length !== 9 || a[0] !== 4)
|
|
30
|
+
throw new Error("unsupported pairing payload");
|
|
31
|
+
const [v, mid, appId, topic, hostPub, hostId, pairSecret, exp, root] = a;
|
|
32
|
+
if (![mid, appId, topic, hostPub, hostId, pairSecret, root].every((x) => typeof x === "string") ||
|
|
33
|
+
typeof exp !== "number") {
|
|
34
|
+
throw new Error("malformed pairing payload");
|
|
35
|
+
}
|
|
36
|
+
if (b64uDecode(pairSecret).length !== 16)
|
|
37
|
+
throw new Error("malformed pairing secret");
|
|
38
|
+
return { v, mid, root, appId, topic, hostPub, hostId, pairSecret, exp };
|
|
39
|
+
}
|
|
40
|
+
export async function derivePairKey(pairSecret) {
|
|
41
|
+
return importAesKey(await hkdf(pairSecret, "swal-pair/v1"));
|
|
42
|
+
}
|
|
43
|
+
async function pairMacKey(pairSecret) {
|
|
44
|
+
return hkdf(pairSecret, "swal-pair-proof/v1");
|
|
45
|
+
}
|
|
46
|
+
export async function createPairOffer(vault, o) {
|
|
47
|
+
const hostKeys = (await crypto.subtle.generateKey(ECDH, false, [
|
|
48
|
+
"deriveBits",
|
|
49
|
+
]));
|
|
50
|
+
const pairSecret = randomBytes(16);
|
|
51
|
+
const payload = {
|
|
52
|
+
v: 4,
|
|
53
|
+
mid: o.mid,
|
|
54
|
+
root: o.root,
|
|
55
|
+
appId: o.appId,
|
|
56
|
+
topic: o.topic,
|
|
57
|
+
hostPub: b64uEncode(new Uint8Array(await crypto.subtle.exportKey("raw", hostKeys.publicKey))),
|
|
58
|
+
hostId: vault.deviceId,
|
|
59
|
+
pairSecret: b64uEncode(pairSecret),
|
|
60
|
+
exp: o.now + (o.ttlMs ?? PAIR_TTL_MS),
|
|
61
|
+
};
|
|
62
|
+
return { payload, encoded: encodePairPayload(payload), pairSecret, hostKeys };
|
|
63
|
+
}
|
|
64
|
+
/** What the host signs with its identity key: the transcript, its id and key (inside the encrypted grant). */
|
|
65
|
+
export const hostProofBytes = (transcript, hostId, pub) => utf8(JSON.stringify(["swal-pair-host/v1", b64uEncode(transcript), hostId, pub]));
|
|
66
|
+
/** Guest-side check of the host's identity proof: hostId (from the QR) = fingerprint(pub) and a valid ML-DSA-65 signature. */
|
|
67
|
+
export async function verifyHostProof(p, transcript, proof) {
|
|
68
|
+
const h = proof;
|
|
69
|
+
if (!h || typeof h.pub !== "string" || typeof h.sig !== "string")
|
|
70
|
+
return false;
|
|
71
|
+
if (!(await idMatchesPub(p.hostId, h.pub)))
|
|
72
|
+
return false;
|
|
73
|
+
try {
|
|
74
|
+
return identityVerify(b64uDecode(h.pub), hostProofBytes(transcript, p.hostId, h.pub), b64uDecode(h.sig));
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Pairing transcript hash: binds the SAS and the session key to BOTH ephemeral ECDH keys, the guest's ephemeral
|
|
82
|
+
* ML-KEM-768 encapsulation key and the host's ciphertext to it, BOTH nonces (host: pairSecret from the QR; guest:
|
|
83
|
+
* fresh `n` in its hello), the host identity (its id) and the mesh/app/topic.
|
|
84
|
+
*/
|
|
85
|
+
export async function pairTranscript(p, guestPub, guestNonce, guestKem, kemCt) {
|
|
86
|
+
const t = JSON.stringify([
|
|
87
|
+
"swal-pair-transcript/v5",
|
|
88
|
+
p.appId,
|
|
89
|
+
p.topic,
|
|
90
|
+
p.mid,
|
|
91
|
+
p.root,
|
|
92
|
+
p.hostId,
|
|
93
|
+
p.hostPub,
|
|
94
|
+
guestPub,
|
|
95
|
+
p.pairSecret,
|
|
96
|
+
guestNonce,
|
|
97
|
+
guestKem,
|
|
98
|
+
kemCt,
|
|
99
|
+
p.exp,
|
|
100
|
+
]);
|
|
101
|
+
return new Uint8Array(await crypto.subtle.digest("SHA-256", bs(utf8(t))));
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* 6-digit Short Authentication String: HKDF(ikm = ML-KEM secret || ECDH secret, salt = transcript hash), 40 bits
|
|
105
|
+
* mod 10^6. A man in the middle must replace the ECDH key or the KEM ciphertext, which changes the code.
|
|
106
|
+
*/
|
|
107
|
+
export async function sasCode(shared, transcript) {
|
|
108
|
+
const b = await hkdf(shared, "swal-sas/v3", transcript);
|
|
109
|
+
const n = (b[0] * 2 ** 32 +
|
|
110
|
+
new DataView(b.buffer, b.byteOffset).getUint32(1, false)) %
|
|
111
|
+
1_000_000;
|
|
112
|
+
return String(n).padStart(6, "0");
|
|
113
|
+
}
|
|
114
|
+
/** Hybrid session (AGENTS.md §2): HKDF-SHA-256(ML-KEM-768 secret || ECDH P-256 secret, salt = transcript). */
|
|
115
|
+
async function session(kemSecret, ecdhSecret, transcript) {
|
|
116
|
+
const key = await importAesKey(await hybridSecret(kemSecret, ecdhSecret, "swal-pair-session/v3", transcript));
|
|
117
|
+
return { key, sas: await sasCode(concat(kemSecret, ecdhSecret), transcript) };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* What the guest signs with its IDENTITY key inside the ack: proof of possession of the key it asks to be admitted
|
|
121
|
+
* with, bound to this pairing session (transcript) so it cannot be replayed into another one.
|
|
122
|
+
*/
|
|
123
|
+
export const ackSignedBytes = (transcript, deviceId, pub, name) => utf8(JSON.stringify([
|
|
124
|
+
"swal-pair-ack/v1",
|
|
125
|
+
b64uEncode(transcript),
|
|
126
|
+
deviceId,
|
|
127
|
+
pub,
|
|
128
|
+
name,
|
|
129
|
+
]));
|
|
130
|
+
/** Host-side check of a guest ack: deviceId = fingerprint(pub) and a valid signature by that key over the transcript. */
|
|
131
|
+
export async function verifyPairAck(verify, transcript, a) {
|
|
132
|
+
if (typeof a.deviceId !== "string" ||
|
|
133
|
+
typeof a.pub !== "string" ||
|
|
134
|
+
typeof a.sig !== "string")
|
|
135
|
+
return "malformed ack";
|
|
136
|
+
if (!(await idMatchesPub(a.deviceId, a.pub)))
|
|
137
|
+
return "deviceId is not the fingerprint of the guest key";
|
|
138
|
+
const name = typeof a.name === "string" ? a.name : "";
|
|
139
|
+
try {
|
|
140
|
+
if (await verify(b64uDecode(a.pub), ackSignedBytes(transcript, a.deviceId, a.pub, name), b64uDecode(a.sig)))
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
catch { }
|
|
144
|
+
return "guest did not prove possession of its identity key";
|
|
145
|
+
}
|
|
146
|
+
const helloProof = async (secret, e, n, k) => hmac(await pairMacKey(secret), utf8(`hello/v3|${e}|${n}|${k}`));
|
|
147
|
+
const json = (o) => utf8(JSON.stringify(o));
|
|
148
|
+
const parse = (b) => JSON.parse(fromUtf8(b));
|
|
149
|
+
/** Host side. One instance per offer. pairSecret is single-use: burned by the first valid hello. */
|
|
150
|
+
export class HostPairing {
|
|
151
|
+
offer;
|
|
152
|
+
hooks;
|
|
153
|
+
burned = false;
|
|
154
|
+
done = false;
|
|
155
|
+
sess = null;
|
|
156
|
+
transcript = null;
|
|
157
|
+
hostOk = false;
|
|
158
|
+
guestDevice = null;
|
|
159
|
+
send = null;
|
|
160
|
+
constructor(offer, hooks) {
|
|
161
|
+
this.offer = offer;
|
|
162
|
+
this.hooks = hooks;
|
|
163
|
+
}
|
|
164
|
+
get expired() {
|
|
165
|
+
return this.hooks.now() > this.offer.payload.exp;
|
|
166
|
+
}
|
|
167
|
+
get finished() {
|
|
168
|
+
return this.done;
|
|
169
|
+
}
|
|
170
|
+
cancel() {
|
|
171
|
+
this.done = true;
|
|
172
|
+
}
|
|
173
|
+
async handle(msg, send) {
|
|
174
|
+
if (this.done)
|
|
175
|
+
return send({ t: "err", e: "closed" });
|
|
176
|
+
try {
|
|
177
|
+
if (msg.t === "hello")
|
|
178
|
+
return await this.onHello(msg, send);
|
|
179
|
+
if (this.send !== send)
|
|
180
|
+
return; // only the link that burned the secret may continue
|
|
181
|
+
if (msg.t === "ack")
|
|
182
|
+
return await this.onAck(msg);
|
|
183
|
+
if (msg.t === "abort")
|
|
184
|
+
return this.fail("guest rejected SAS");
|
|
185
|
+
}
|
|
186
|
+
catch (e) {
|
|
187
|
+
if (this.send !== send)
|
|
188
|
+
return;
|
|
189
|
+
send({ t: "err", e: "refused" });
|
|
190
|
+
this.fail(e instanceof Error ? e.message : "protocol error");
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
fail(reason) {
|
|
194
|
+
this.done = true;
|
|
195
|
+
this.hooks.onFail(reason);
|
|
196
|
+
}
|
|
197
|
+
async onHello(msg, send) {
|
|
198
|
+
if (this.expired)
|
|
199
|
+
return send({ t: "err", e: "expired" });
|
|
200
|
+
if (this.burned)
|
|
201
|
+
return send({ t: "err", e: "used" });
|
|
202
|
+
const secret = this.offer.pairSecret;
|
|
203
|
+
let got;
|
|
204
|
+
try {
|
|
205
|
+
if (typeof msg.e !== "string" ||
|
|
206
|
+
typeof msg.n !== "string" ||
|
|
207
|
+
typeof msg.k !== "string" ||
|
|
208
|
+
b64uDecode(msg.n).length !== 16)
|
|
209
|
+
throw new Error();
|
|
210
|
+
got = b64uDecode(msg.p);
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
return send({ t: "err", e: "bad proof" });
|
|
214
|
+
}
|
|
215
|
+
const expect = await helloProof(secret, msg.e, msg.n, msg.k);
|
|
216
|
+
if (!equalBytes(expect, got))
|
|
217
|
+
return send({ t: "err", e: "bad proof" });
|
|
218
|
+
if (this.burned)
|
|
219
|
+
return send({ t: "err", e: "used" }); // re-check: another hello may have won during the awaits above
|
|
220
|
+
this.burned = true; // single use, enforced by the host (no await between check and set)
|
|
221
|
+
this.send = send;
|
|
222
|
+
const guestPub = await crypto.subtle.importKey("raw", bs(b64uDecode(msg.e)), ECDH, false, []);
|
|
223
|
+
const shared = new Uint8Array(await crypto.subtle.deriveBits({ name: "ECDH", public: guestPub }, this.offer.hostKeys.privateKey, 256));
|
|
224
|
+
const kem = kemEncapsulate(b64uDecode(msg.k)); // throws on a malformed key: the hello is refused
|
|
225
|
+
const c = b64uEncode(kem.cipherText);
|
|
226
|
+
this.transcript = await pairTranscript(this.offer.payload, msg.e, msg.n, msg.k, c);
|
|
227
|
+
this.sess = await session(kem.sharedSecret, shared, this.transcript);
|
|
228
|
+
send({ t: "ready", c });
|
|
229
|
+
this.hooks.onSas({
|
|
230
|
+
code: this.sess.sas,
|
|
231
|
+
confirm: () => {
|
|
232
|
+
this.hostOk = true;
|
|
233
|
+
void this.tryGrant();
|
|
234
|
+
},
|
|
235
|
+
reject: () => {
|
|
236
|
+
send({ t: "abort" });
|
|
237
|
+
this.fail("host rejected SAS");
|
|
238
|
+
},
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
async onAck(msg) {
|
|
242
|
+
if (!this.sess || !this.transcript || this.guestDevice)
|
|
243
|
+
return;
|
|
244
|
+
const body = parse(await openUpdate(this.sess.key, b64uDecode(msg.ct), "swal-pair/ack"));
|
|
245
|
+
const bad = await verifyPairAck(this.hooks.verify, this.transcript, body ?? {});
|
|
246
|
+
if (bad ||
|
|
247
|
+
typeof body.deviceId !== "string" ||
|
|
248
|
+
typeof body.pub !== "string")
|
|
249
|
+
throw new Error(bad ?? "malformed ack");
|
|
250
|
+
this.guestDevice = {
|
|
251
|
+
deviceId: body.deviceId,
|
|
252
|
+
pub: body.pub,
|
|
253
|
+
name: typeof body.name === "string" ? body.name : "",
|
|
254
|
+
};
|
|
255
|
+
await this.tryGrant();
|
|
256
|
+
}
|
|
257
|
+
async tryGrant() {
|
|
258
|
+
if (!this.hostOk ||
|
|
259
|
+
!this.guestDevice ||
|
|
260
|
+
!this.sess ||
|
|
261
|
+
!this.send ||
|
|
262
|
+
this.done)
|
|
263
|
+
return;
|
|
264
|
+
this.done = true;
|
|
265
|
+
let grant;
|
|
266
|
+
try {
|
|
267
|
+
grant = await this.hooks.buildGrant(this.guestDevice);
|
|
268
|
+
grant.hostProof = await this.hooks.prove(this.transcript);
|
|
269
|
+
}
|
|
270
|
+
catch (e) {
|
|
271
|
+
this.send({ t: "err", e: "refused" });
|
|
272
|
+
this.hooks.onFail(`grant refused: ${e instanceof Error ? e.message : String(e)}`);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
const ct = b64uEncode(await sealUpdate(this.sess.key, json(grant), "swal-pair/grant"));
|
|
276
|
+
this.send({ t: "grant", ct });
|
|
277
|
+
this.hooks.onPaired({ ...this.guestDevice, addedAt: this.hooks.now() });
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/** Guest side. */
|
|
281
|
+
export class GuestPairing {
|
|
282
|
+
payload;
|
|
283
|
+
vault;
|
|
284
|
+
hooks;
|
|
285
|
+
sess = null;
|
|
286
|
+
transcript = new Uint8Array(0);
|
|
287
|
+
ePub = "";
|
|
288
|
+
nonce = "";
|
|
289
|
+
kemPub = "";
|
|
290
|
+
kemSecret = new Uint8Array(0);
|
|
291
|
+
ecdhSecret = new Uint8Array(0);
|
|
292
|
+
proof = "";
|
|
293
|
+
sent = new WeakSet();
|
|
294
|
+
settled = false;
|
|
295
|
+
result;
|
|
296
|
+
resolve;
|
|
297
|
+
reject;
|
|
298
|
+
active = null;
|
|
299
|
+
constructor(payload, vault, hooks) {
|
|
300
|
+
this.payload = payload;
|
|
301
|
+
this.vault = vault;
|
|
302
|
+
this.hooks = hooks;
|
|
303
|
+
this.result = new Promise((res, rej) => {
|
|
304
|
+
this.resolve = res;
|
|
305
|
+
this.reject = rej;
|
|
306
|
+
});
|
|
307
|
+
this.result.catch(() => { });
|
|
308
|
+
}
|
|
309
|
+
static async create(payload, vault, hooks) {
|
|
310
|
+
if (hooks.now > payload.exp)
|
|
311
|
+
throw new Error("pairing code expired");
|
|
312
|
+
const g = new GuestPairing(payload, vault, hooks);
|
|
313
|
+
const eph = (await crypto.subtle.generateKey(ECDH, false, [
|
|
314
|
+
"deriveBits",
|
|
315
|
+
]));
|
|
316
|
+
g.ePub = b64uEncode(new Uint8Array(await crypto.subtle.exportKey("raw", eph.publicKey)));
|
|
317
|
+
g.nonce = b64uEncode(randomBytes(16));
|
|
318
|
+
const kem = kemKeygen(); // ephemeral: one pairing only
|
|
319
|
+
g.kemPub = b64uEncode(kem.publicKey);
|
|
320
|
+
g.kemSecret = kem.secretKey;
|
|
321
|
+
const secret = b64uDecode(payload.pairSecret);
|
|
322
|
+
const hostPub = await crypto.subtle.importKey("raw", bs(b64uDecode(payload.hostPub)), ECDH, false, []);
|
|
323
|
+
g.ecdhSecret = new Uint8Array(await crypto.subtle.deriveBits({ name: "ECDH", public: hostPub }, eph.privateKey, 256));
|
|
324
|
+
g.proof = b64uEncode(await helloProof(secret, g.ePub, g.nonce, g.kemPub));
|
|
325
|
+
return g;
|
|
326
|
+
}
|
|
327
|
+
/** Called for every new link in the pairing room; says hello over it. */
|
|
328
|
+
attach(send) {
|
|
329
|
+
if (this.settled)
|
|
330
|
+
return;
|
|
331
|
+
send({
|
|
332
|
+
t: "hello",
|
|
333
|
+
e: this.ePub,
|
|
334
|
+
n: this.nonce,
|
|
335
|
+
k: this.kemPub,
|
|
336
|
+
p: this.proof,
|
|
337
|
+
});
|
|
338
|
+
this.sent.add(send);
|
|
339
|
+
}
|
|
340
|
+
fail(e) {
|
|
341
|
+
if (this.settled)
|
|
342
|
+
return;
|
|
343
|
+
this.settled = true;
|
|
344
|
+
this.reject(e);
|
|
345
|
+
}
|
|
346
|
+
async handle(msg, send) {
|
|
347
|
+
if (this.settled)
|
|
348
|
+
return;
|
|
349
|
+
// R4-N2: once the host's link is chosen (its `ready` started the session), the other links of the pairing room
|
|
350
|
+
// can no longer end the pairing
|
|
351
|
+
if (this.active && send !== this.active)
|
|
352
|
+
return;
|
|
353
|
+
try {
|
|
354
|
+
if (msg.t === "err")
|
|
355
|
+
return this.fail(new Error(`host refused pairing: ${msg.e}`));
|
|
356
|
+
if (msg.t === "abort")
|
|
357
|
+
return this.fail(new Error("host rejected the SAS"));
|
|
358
|
+
if (msg.t === "ready" && !this.active) {
|
|
359
|
+
if (typeof msg.c !== "string")
|
|
360
|
+
throw new Error("pairing: the host sent no ML-KEM ciphertext");
|
|
361
|
+
this.active = send;
|
|
362
|
+
// hybrid session: a substituted ciphertext (or ECDH key) yields another SAS, caught by the user
|
|
363
|
+
const kemSecret = kemDecapsulate(b64uDecode(msg.c), this.kemSecret);
|
|
364
|
+
this.transcript = await pairTranscript(this.payload, this.ePub, this.nonce, this.kemPub, msg.c);
|
|
365
|
+
this.sess = await session(kemSecret, this.ecdhSecret, this.transcript);
|
|
366
|
+
const ok = await this.hooks.onSas(this.sess.sas);
|
|
367
|
+
if (!ok) {
|
|
368
|
+
send({ t: "abort" });
|
|
369
|
+
return this.fail(new Error("SAS rejected by user"));
|
|
370
|
+
}
|
|
371
|
+
const deviceId = this.vault.deviceId;
|
|
372
|
+
const pub = b64uEncode(this.vault.devicePublicKey);
|
|
373
|
+
const name = this.hooks.name;
|
|
374
|
+
const sig = b64uEncode(await this.vault.sign(ackSignedBytes(this.transcript, deviceId, pub, name)));
|
|
375
|
+
const ack = { deviceId, pub, name, sig };
|
|
376
|
+
if (!this.sess)
|
|
377
|
+
return;
|
|
378
|
+
const ct = b64uEncode(await sealUpdate(this.sess.key, json(ack), "swal-pair/ack"));
|
|
379
|
+
send({ t: "ack", ct });
|
|
380
|
+
}
|
|
381
|
+
else if (msg.t === "grant" && this.active === send && this.sess) {
|
|
382
|
+
const g = parse(await openUpdate(this.sess.key, b64uDecode(msg.ct), "swal-pair/grant"));
|
|
383
|
+
// the host proves, inside the SAS-authenticated session, that it holds the identity the QR names
|
|
384
|
+
if (!(await verifyHostProof(this.payload, this.transcript, g.hostProof)))
|
|
385
|
+
throw new Error("pairing grant: the host did not prove the identity named by the pairing code");
|
|
386
|
+
this.settled = true;
|
|
387
|
+
this.resolve(g);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
catch (e) {
|
|
391
|
+
this.fail(e instanceof Error ? e : new Error(String(e)));
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
//# sourceMappingURL=pairing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairing.js","sourceRoot":"","sources":["../../src/web/pairing.ts"],"names":[],"mappings":"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"}
|
package/dist/web/pq.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export declare const IDENTITY_ALG: "ML-DSA-65";
|
|
2
|
+
export declare const KEM_ALG: "ML-KEM-768";
|
|
3
|
+
export declare const ML_DSA_PUBLIC_KEY_BYTES = 1952;
|
|
4
|
+
export declare const ML_DSA_SECRET_KEY_BYTES = 4032;
|
|
5
|
+
export declare const ML_DSA_SIGNATURE_BYTES = 3309;
|
|
6
|
+
export declare const ML_KEM_PUBLIC_KEY_BYTES = 1184;
|
|
7
|
+
export declare const ML_KEM_SECRET_KEY_BYTES = 2400;
|
|
8
|
+
export declare const ML_KEM_CIPHERTEXT_BYTES = 1088;
|
|
9
|
+
/**
|
|
10
|
+
* Device id = fingerprint of the ML-DSA-65 identity key, with ONE canonical encoding shared with `web/trust`
|
|
11
|
+
* (`keyFingerprint`): base64url(SHA-256(canonicalJson({ alg: "ML-DSA-65", pub: base64url(raw 1952-byte key) }))),
|
|
12
|
+
* 43 characters (full 256-bit hash: 128-bit second-preimage resistance even against Grover). The algorithm is part of
|
|
13
|
+
* the hashed value, so a key of another algorithm can never produce the same id.
|
|
14
|
+
*/
|
|
15
|
+
export declare function deviceIdOf(publicKey: Uint8Array): Promise<string>;
|
|
16
|
+
/** New ML-DSA-65 identity key pair (raw bytes). */
|
|
17
|
+
export declare const identityKeygen: () => {
|
|
18
|
+
publicKey: Uint8Array;
|
|
19
|
+
secretKey: Uint8Array;
|
|
20
|
+
};
|
|
21
|
+
export declare const identitySign: (secretKey: Uint8Array, data: Uint8Array) => Uint8Array;
|
|
22
|
+
/** ML-DSA-65 verification with exact sizes; never throws (anything else, e.g. an ECDSA key or signature: false). */
|
|
23
|
+
export declare function identityVerify(publicKey: Uint8Array, data: Uint8Array, signature: Uint8Array): boolean;
|
|
24
|
+
/** New ML-KEM-768 key pair (raw bytes): `publicKey` is the encapsulation key, `secretKey` the decapsulation key. */
|
|
25
|
+
export declare const kemKeygen: () => {
|
|
26
|
+
publicKey: Uint8Array;
|
|
27
|
+
secretKey: Uint8Array;
|
|
28
|
+
};
|
|
29
|
+
export declare function kemEncapsulate(publicKey: Uint8Array): {
|
|
30
|
+
cipherText: Uint8Array;
|
|
31
|
+
sharedSecret: Uint8Array;
|
|
32
|
+
};
|
|
33
|
+
export declare function kemDecapsulate(cipherText: Uint8Array, secretKey: Uint8Array): Uint8Array;
|
|
34
|
+
/** Hybrid combiner: HKDF-SHA-256(ikm = ML-KEM secret || ECDH secret, salt, info). Both inputs are required. */
|
|
35
|
+
export declare function hybridSecret(kemSecret: Uint8Array, ecdhSecret: Uint8Array, info: string, salt?: Uint8Array): Promise<Uint8Array>;
|
|
36
|
+
//# sourceMappingURL=pq.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pq.d.ts","sourceRoot":"","sources":["../../src/web/pq.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,YAAY,EAAG,WAAoB,CAAC;AACjD,eAAO,MAAM,OAAO,EAAG,YAAqB,CAAC;AAC7C,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAIjE;AAED,mDAAmD;AACnD,eAAO,MAAM,cAAc,QAAO;IACjC,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;CACD,CAAC;AAEvB,eAAO,MAAM,YAAY,cACb,UAAU,QACf,UAAU,KACd,UAA4C,CAAC;AAEhD,oHAAoH;AACpH,wBAAgB,cAAc,CAC7B,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,UAAU,GACnB,OAAO,CAWT;AAED,oHAAoH;AACpH,eAAO,MAAM,SAAS,QAAO;IAAE,SAAS,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,UAAU,CAAA;CACxD,CAAC;AAEpB,wBAAgB,cAAc,CAAC,SAAS,EAAE,UAAU,GAAG;IACtD,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,UAAU,CAAC;CACzB,CAIA;AAED,wBAAgB,cAAc,CAC7B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,UAAU,GACnB,UAAU,CAIZ;AAED,+GAA+G;AAC/G,wBAAgB,YAAY,CAC3B,SAAS,EAAE,UAAU,EACrB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,UAAU,CAAC,CAIrB"}
|