@sempdev/semp 0.4.3
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 +21 -0
- package/README.md +59 -0
- package/dist/brief/address.d.ts +77 -0
- package/dist/brief/address.d.ts.map +1 -0
- package/dist/brief/address.js +217 -0
- package/dist/brief/address.js.map +1 -0
- package/dist/brief/brief.d.ts +75 -0
- package/dist/brief/brief.d.ts.map +1 -0
- package/dist/brief/brief.js +56 -0
- package/dist/brief/brief.js.map +1 -0
- package/dist/brief/index.d.ts +11 -0
- package/dist/brief/index.d.ts.map +1 -0
- package/dist/brief/index.js +11 -0
- package/dist/brief/index.js.map +1 -0
- package/dist/canonical/index.d.ts +8 -0
- package/dist/canonical/index.d.ts.map +1 -0
- package/dist/canonical/index.js +8 -0
- package/dist/canonical/index.js.map +1 -0
- package/dist/canonical/marshal.d.ts +35 -0
- package/dist/canonical/marshal.d.ts.map +1 -0
- package/dist/canonical/marshal.js +107 -0
- package/dist/canonical/marshal.js.map +1 -0
- package/dist/clockskew/index.d.ts +52 -0
- package/dist/clockskew/index.d.ts.map +1 -0
- package/dist/clockskew/index.js +62 -0
- package/dist/clockskew/index.js.map +1 -0
- package/dist/closure/closure.d.ts +106 -0
- package/dist/closure/closure.d.ts.map +1 -0
- package/dist/closure/closure.js +152 -0
- package/dist/closure/closure.js.map +1 -0
- package/dist/closure/driver.d.ts +103 -0
- package/dist/closure/driver.d.ts.map +1 -0
- package/dist/closure/driver.js +126 -0
- package/dist/closure/driver.js.map +1 -0
- package/dist/closure/index.d.ts +13 -0
- package/dist/closure/index.d.ts.map +1 -0
- package/dist/closure/index.js +13 -0
- package/dist/closure/index.js.map +1 -0
- package/dist/closure/store.d.ts +80 -0
- package/dist/closure/store.d.ts.map +1 -0
- package/dist/closure/store.js +89 -0
- package/dist/closure/store.js.map +1 -0
- package/dist/crypto/aead.d.ts +29 -0
- package/dist/crypto/aead.d.ts.map +1 -0
- package/dist/crypto/aead.js +48 -0
- package/dist/crypto/aead.js.map +1 -0
- package/dist/crypto/argon2.d.ts +20 -0
- package/dist/crypto/argon2.d.ts.map +1 -0
- package/dist/crypto/argon2.js +28 -0
- package/dist/crypto/argon2.js.map +1 -0
- package/dist/crypto/index.d.ts +14 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +14 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/kdf.d.ts +96 -0
- package/dist/crypto/kdf.d.ts.map +1 -0
- package/dist/crypto/kdf.js +122 -0
- package/dist/crypto/kdf.js.map +1 -0
- package/dist/crypto/kem.d.ts +85 -0
- package/dist/crypto/kem.d.ts.map +1 -0
- package/dist/crypto/kem.js +130 -0
- package/dist/crypto/kem.js.map +1 -0
- package/dist/crypto/mac.d.ts +19 -0
- package/dist/crypto/mac.d.ts.map +1 -0
- package/dist/crypto/mac.js +32 -0
- package/dist/crypto/mac.js.map +1 -0
- package/dist/delivery/ack.d.ts +125 -0
- package/dist/delivery/ack.d.ts.map +1 -0
- package/dist/delivery/ack.js +141 -0
- package/dist/delivery/ack.js.map +1 -0
- package/dist/delivery/blocklist.d.ts +87 -0
- package/dist/delivery/blocklist.d.ts.map +1 -0
- package/dist/delivery/blocklist.js +107 -0
- package/dist/delivery/blocklist.js.map +1 -0
- package/dist/delivery/cancel.d.ts +60 -0
- package/dist/delivery/cancel.d.ts.map +1 -0
- package/dist/delivery/cancel.js +43 -0
- package/dist/delivery/cancel.js.map +1 -0
- package/dist/delivery/disposition.d.ts +106 -0
- package/dist/delivery/disposition.d.ts.map +1 -0
- package/dist/delivery/disposition.js +105 -0
- package/dist/delivery/disposition.js.map +1 -0
- package/dist/delivery/fetch.d.ts +59 -0
- package/dist/delivery/fetch.d.ts.map +1 -0
- package/dist/delivery/fetch.js +47 -0
- package/dist/delivery/fetch.js.map +1 -0
- package/dist/delivery/forwarder.d.ts +106 -0
- package/dist/delivery/forwarder.d.ts.map +1 -0
- package/dist/delivery/forwarder.js +251 -0
- package/dist/delivery/forwarder.js.map +1 -0
- package/dist/delivery/inbox.d.ts +42 -0
- package/dist/delivery/inbox.d.ts.map +1 -0
- package/dist/delivery/inbox.js +68 -0
- package/dist/delivery/inbox.js.map +1 -0
- package/dist/delivery/index.d.ts +31 -0
- package/dist/delivery/index.d.ts.map +1 -0
- package/dist/delivery/index.js +31 -0
- package/dist/delivery/index.js.map +1 -0
- package/dist/delivery/internalroute.d.ts +50 -0
- package/dist/delivery/internalroute.d.ts.map +1 -0
- package/dist/delivery/internalroute.js +23 -0
- package/dist/delivery/internalroute.js.map +1 -0
- package/dist/delivery/pipeline.d.ts +153 -0
- package/dist/delivery/pipeline.d.ts.map +1 -0
- package/dist/delivery/pipeline.js +356 -0
- package/dist/delivery/pipeline.js.map +1 -0
- package/dist/delivery/policy_state.d.ts +105 -0
- package/dist/delivery/policy_state.d.ts.map +1 -0
- package/dist/delivery/policy_state.js +293 -0
- package/dist/delivery/policy_state.js.map +1 -0
- package/dist/delivery/queue.d.ts +47 -0
- package/dist/delivery/queue.d.ts.map +1 -0
- package/dist/delivery/queue.js +33 -0
- package/dist/delivery/queue.js.map +1 -0
- package/dist/delivery/receipt.d.ts +137 -0
- package/dist/delivery/receipt.d.ts.map +1 -0
- package/dist/delivery/receipt.js +181 -0
- package/dist/delivery/receipt.js.map +1 -0
- package/dist/delivery/receipt_store.d.ts +81 -0
- package/dist/delivery/receipt_store.d.ts.map +1 -0
- package/dist/delivery/receipt_store.js +74 -0
- package/dist/delivery/receipt_store.js.map +1 -0
- package/dist/delivery/retry.d.ts +78 -0
- package/dist/delivery/retry.d.ts.map +1 -0
- package/dist/delivery/retry.js +132 -0
- package/dist/delivery/retry.js.map +1 -0
- package/dist/delivery/scheduler.d.ts +156 -0
- package/dist/delivery/scheduler.d.ts.map +1 -0
- package/dist/delivery/scheduler.js +349 -0
- package/dist/delivery/scheduler.js.map +1 -0
- package/dist/delivery/stage_partition.d.ts +87 -0
- package/dist/delivery/stage_partition.d.ts.map +1 -0
- package/dist/delivery/stage_partition.js +122 -0
- package/dist/delivery/stage_partition.js.map +1 -0
- package/dist/delivery/staged_runner.d.ts +100 -0
- package/dist/delivery/staged_runner.d.ts.map +1 -0
- package/dist/delivery/staged_runner.js +277 -0
- package/dist/delivery/staged_runner.js.map +1 -0
- package/dist/delivery/submission.d.ts +72 -0
- package/dist/delivery/submission.d.ts.map +1 -0
- package/dist/delivery/submission.js +58 -0
- package/dist/delivery/submission.js.map +1 -0
- package/dist/delivery/sync.d.ts +68 -0
- package/dist/delivery/sync.d.ts.map +1 -0
- package/dist/delivery/sync.js +99 -0
- package/dist/delivery/sync.js.map +1 -0
- package/dist/delivery/user_policy.d.ts +74 -0
- package/dist/delivery/user_policy.d.ts.map +1 -0
- package/dist/delivery/user_policy.js +140 -0
- package/dist/delivery/user_policy.js.map +1 -0
- package/dist/discovery/cache.d.ts +37 -0
- package/dist/discovery/cache.d.ts.map +1 -0
- package/dist/discovery/cache.js +45 -0
- package/dist/discovery/cache.js.map +1 -0
- package/dist/discovery/configuration.d.ts +97 -0
- package/dist/discovery/configuration.d.ts.map +1 -0
- package/dist/discovery/configuration.js +146 -0
- package/dist/discovery/configuration.js.map +1 -0
- package/dist/discovery/dns.d.ts +56 -0
- package/dist/discovery/dns.d.ts.map +1 -0
- package/dist/discovery/dns.js +120 -0
- package/dist/discovery/dns.js.map +1 -0
- package/dist/discovery/domain_keys.d.ts +62 -0
- package/dist/discovery/domain_keys.d.ts.map +1 -0
- package/dist/discovery/domain_keys.js +89 -0
- package/dist/discovery/domain_keys.js.map +1 -0
- package/dist/discovery/index.d.ts +19 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +19 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/lookup.d.ts +72 -0
- package/dist/discovery/lookup.d.ts.map +1 -0
- package/dist/discovery/lookup.js +121 -0
- package/dist/discovery/lookup.js.map +1 -0
- package/dist/discovery/onion.d.ts +34 -0
- package/dist/discovery/onion.d.ts.map +1 -0
- package/dist/discovery/onion.js +61 -0
- package/dist/discovery/onion.js.map +1 -0
- package/dist/discovery/partition.d.ts +96 -0
- package/dist/discovery/partition.d.ts.map +1 -0
- package/dist/discovery/partition.js +247 -0
- package/dist/discovery/partition.js.map +1 -0
- package/dist/discovery/resolver.d.ts +113 -0
- package/dist/discovery/resolver.d.ts.map +1 -0
- package/dist/discovery/resolver.js +176 -0
- package/dist/discovery/resolver.js.map +1 -0
- package/dist/discovery/txt.d.ts +39 -0
- package/dist/discovery/txt.d.ts.map +1 -0
- package/dist/discovery/txt.js +71 -0
- package/dist/discovery/txt.js.map +1 -0
- package/dist/enclosure/forwarding.d.ts +128 -0
- package/dist/enclosure/forwarding.d.ts.map +1 -0
- package/dist/enclosure/forwarding.js +119 -0
- package/dist/enclosure/forwarding.js.map +1 -0
- package/dist/enclosure/index.d.ts +11 -0
- package/dist/enclosure/index.d.ts.map +1 -0
- package/dist/enclosure/index.js +11 -0
- package/dist/enclosure/index.js.map +1 -0
- package/dist/envelope/buckets.d.ts +38 -0
- package/dist/envelope/buckets.d.ts.map +1 -0
- package/dist/envelope/buckets.js +73 -0
- package/dist/envelope/buckets.js.map +1 -0
- package/dist/envelope/canonical.d.ts +28 -0
- package/dist/envelope/canonical.d.ts.map +1 -0
- package/dist/envelope/canonical.js +54 -0
- package/dist/envelope/canonical.js.map +1 -0
- package/dist/envelope/compose.d.ts +171 -0
- package/dist/envelope/compose.d.ts.map +1 -0
- package/dist/envelope/compose.js +237 -0
- package/dist/envelope/compose.js.map +1 -0
- package/dist/envelope/encode.d.ts +41 -0
- package/dist/envelope/encode.d.ts.map +1 -0
- package/dist/envelope/encode.js +69 -0
- package/dist/envelope/encode.js.map +1 -0
- package/dist/envelope/index.d.ts +20 -0
- package/dist/envelope/index.d.ts.map +1 -0
- package/dist/envelope/index.js +20 -0
- package/dist/envelope/index.js.map +1 -0
- package/dist/envelope/open_any.d.ts +48 -0
- package/dist/envelope/open_any.d.ts.map +1 -0
- package/dist/envelope/open_any.js +81 -0
- package/dist/envelope/open_any.js.map +1 -0
- package/dist/envelope/open_verified.d.ts +59 -0
- package/dist/envelope/open_verified.d.ts.map +1 -0
- package/dist/envelope/open_verified.js +67 -0
- package/dist/envelope/open_verified.js.map +1 -0
- package/dist/envelope/padding.d.ts +55 -0
- package/dist/envelope/padding.d.ts.map +1 -0
- package/dist/envelope/padding.js +162 -0
- package/dist/envelope/padding.js.map +1 -0
- package/dist/envelope/rejection.d.ts +22 -0
- package/dist/envelope/rejection.d.ts.map +1 -0
- package/dist/envelope/rejection.js +30 -0
- package/dist/envelope/rejection.js.map +1 -0
- package/dist/envelope/sendtime.d.ts +49 -0
- package/dist/envelope/sendtime.d.ts.map +1 -0
- package/dist/envelope/sendtime.js +87 -0
- package/dist/envelope/sendtime.js.map +1 -0
- package/dist/envelope/verify.d.ts +29 -0
- package/dist/envelope/verify.d.ts.map +1 -0
- package/dist/envelope/verify.js +90 -0
- package/dist/envelope/verify.js.map +1 -0
- package/dist/extensions/index.d.ts +7 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +7 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/limits.d.ts +101 -0
- package/dist/extensions/limits.d.ts.map +1 -0
- package/dist/extensions/limits.js +175 -0
- package/dist/extensions/limits.js.map +1 -0
- package/dist/handshake/abort.d.ts +49 -0
- package/dist/handshake/abort.d.ts.map +1 -0
- package/dist/handshake/abort.js +82 -0
- package/dist/handshake/abort.js.map +1 -0
- package/dist/handshake/capabilities.d.ts +46 -0
- package/dist/handshake/capabilities.d.ts.map +1 -0
- package/dist/handshake/capabilities.js +114 -0
- package/dist/handshake/capabilities.js.map +1 -0
- package/dist/handshake/client_state.d.ts +186 -0
- package/dist/handshake/client_state.d.ts.map +1 -0
- package/dist/handshake/client_state.js +520 -0
- package/dist/handshake/client_state.js.map +1 -0
- package/dist/handshake/confirm.d.ts +21 -0
- package/dist/handshake/confirm.d.ts.map +1 -0
- package/dist/handshake/confirm.js +27 -0
- package/dist/handshake/confirm.js.map +1 -0
- package/dist/handshake/driver.d.ts +126 -0
- package/dist/handshake/driver.d.ts.map +1 -0
- package/dist/handshake/driver.js +251 -0
- package/dist/handshake/driver.js.map +1 -0
- package/dist/handshake/federation.d.ts +365 -0
- package/dist/handshake/federation.d.ts.map +1 -0
- package/dist/handshake/federation.js +664 -0
- package/dist/handshake/federation.js.map +1 -0
- package/dist/handshake/first_contact.d.ts +57 -0
- package/dist/handshake/first_contact.d.ts.map +1 -0
- package/dist/handshake/first_contact.js +124 -0
- package/dist/handshake/first_contact.js.map +1 -0
- package/dist/handshake/identity.d.ts +101 -0
- package/dist/handshake/identity.d.ts.map +1 -0
- package/dist/handshake/identity.js +117 -0
- package/dist/handshake/identity.js.map +1 -0
- package/dist/handshake/index.d.ts +21 -0
- package/dist/handshake/index.d.ts.map +1 -0
- package/dist/handshake/index.js +21 -0
- package/dist/handshake/index.js.map +1 -0
- package/dist/handshake/messages.d.ts +176 -0
- package/dist/handshake/messages.d.ts.map +1 -0
- package/dist/handshake/messages.js +125 -0
- package/dist/handshake/messages.js.map +1 -0
- package/dist/handshake/pow.d.ts +53 -0
- package/dist/handshake/pow.d.ts.map +1 -0
- package/dist/handshake/pow.js +142 -0
- package/dist/handshake/pow.js.map +1 -0
- package/dist/handshake/resume_driver.d.ts +56 -0
- package/dist/handshake/resume_driver.d.ts.map +1 -0
- package/dist/handshake/resume_driver.js +75 -0
- package/dist/handshake/resume_driver.js.map +1 -0
- package/dist/handshake/server.d.ts +112 -0
- package/dist/handshake/server.d.ts.map +1 -0
- package/dist/handshake/server.js +247 -0
- package/dist/handshake/server.js.map +1 -0
- package/dist/handshake/server_state.d.ts +102 -0
- package/dist/handshake/server_state.d.ts.map +1 -0
- package/dist/handshake/server_state.js +278 -0
- package/dist/handshake/server_state.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/keys/compromise.d.ts +118 -0
- package/dist/keys/compromise.d.ts.map +1 -0
- package/dist/keys/compromise.js +218 -0
- package/dist/keys/compromise.js.map +1 -0
- package/dist/keys/device_certificate.d.ts +166 -0
- package/dist/keys/device_certificate.d.ts.map +1 -0
- package/dist/keys/device_certificate.js +328 -0
- package/dist/keys/device_certificate.js.map +1 -0
- package/dist/keys/device_records.d.ts +175 -0
- package/dist/keys/device_records.d.ts.map +1 -0
- package/dist/keys/device_records.js +418 -0
- package/dist/keys/device_records.js.map +1 -0
- package/dist/keys/directory_cache.d.ts +64 -0
- package/dist/keys/directory_cache.d.ts.map +1 -0
- package/dist/keys/directory_cache.js +98 -0
- package/dist/keys/directory_cache.js.map +1 -0
- package/dist/keys/directory_state.d.ts +79 -0
- package/dist/keys/directory_state.d.ts.map +1 -0
- package/dist/keys/directory_state.js +155 -0
- package/dist/keys/directory_state.js.map +1 -0
- package/dist/keys/index.d.ts +18 -0
- package/dist/keys/index.d.ts.map +1 -0
- package/dist/keys/index.js +18 -0
- package/dist/keys/index.js.map +1 -0
- package/dist/keys/key_revocation.d.ts +61 -0
- package/dist/keys/key_revocation.d.ts.map +1 -0
- package/dist/keys/key_revocation.js +88 -0
- package/dist/keys/key_revocation.js.map +1 -0
- package/dist/keys/request.d.ts +124 -0
- package/dist/keys/request.d.ts.map +1 -0
- package/dist/keys/request.js +130 -0
- package/dist/keys/request.js.map +1 -0
- package/dist/keys/sign.d.ts +49 -0
- package/dist/keys/sign.d.ts.map +1 -0
- package/dist/keys/sign.js +80 -0
- package/dist/keys/sign.js.map +1 -0
- package/dist/keys/signed.d.ts +80 -0
- package/dist/keys/signed.d.ts.map +1 -0
- package/dist/keys/signed.js +138 -0
- package/dist/keys/signed.js.map +1 -0
- package/dist/keys/store.d.ts +138 -0
- package/dist/keys/store.d.ts.map +1 -0
- package/dist/keys/store.js +107 -0
- package/dist/keys/store.js.map +1 -0
- package/dist/largeattachment/crypto.d.ts +47 -0
- package/dist/largeattachment/crypto.d.ts.map +1 -0
- package/dist/largeattachment/crypto.js +235 -0
- package/dist/largeattachment/crypto.js.map +1 -0
- package/dist/largeattachment/enclosure.d.ts +48 -0
- package/dist/largeattachment/enclosure.d.ts.map +1 -0
- package/dist/largeattachment/enclosure.js +102 -0
- package/dist/largeattachment/enclosure.js.map +1 -0
- package/dist/largeattachment/index.d.ts +15 -0
- package/dist/largeattachment/index.d.ts.map +1 -0
- package/dist/largeattachment/index.js +15 -0
- package/dist/largeattachment/index.js.map +1 -0
- package/dist/largeattachment/store.d.ts +36 -0
- package/dist/largeattachment/store.d.ts.map +1 -0
- package/dist/largeattachment/store.js +37 -0
- package/dist/largeattachment/store.js.map +1 -0
- package/dist/largeattachment/types.d.ts +56 -0
- package/dist/largeattachment/types.d.ts.map +1 -0
- package/dist/largeattachment/types.js +31 -0
- package/dist/largeattachment/types.js.map +1 -0
- package/dist/largeattachment/upload.d.ts +62 -0
- package/dist/largeattachment/upload.d.ts.map +1 -0
- package/dist/largeattachment/upload.js +166 -0
- package/dist/largeattachment/upload.js.map +1 -0
- package/dist/migration/index.d.ts +17 -0
- package/dist/migration/index.d.ts.map +1 -0
- package/dist/migration/index.js +17 -0
- package/dist/migration/index.js.map +1 -0
- package/dist/migration/lockout.d.ts +48 -0
- package/dist/migration/lockout.d.ts.map +1 -0
- package/dist/migration/lockout.js +57 -0
- package/dist/migration/lockout.js.map +1 -0
- package/dist/migration/migration.d.ts +48 -0
- package/dist/migration/migration.d.ts.map +1 -0
- package/dist/migration/migration.js +58 -0
- package/dist/migration/migration.js.map +1 -0
- package/dist/migration/notice.d.ts +33 -0
- package/dist/migration/notice.d.ts.map +1 -0
- package/dist/migration/notice.js +85 -0
- package/dist/migration/notice.js.map +1 -0
- package/dist/migration/orchestrate.d.ts +109 -0
- package/dist/migration/orchestrate.d.ts.map +1 -0
- package/dist/migration/orchestrate.js +212 -0
- package/dist/migration/orchestrate.js.map +1 -0
- package/dist/migration/publication_store.d.ts +34 -0
- package/dist/migration/publication_store.d.ts.map +1 -0
- package/dist/migration/publication_store.js +44 -0
- package/dist/migration/publication_store.js.map +1 -0
- package/dist/migration/sign.d.ts +65 -0
- package/dist/migration/sign.d.ts.map +1 -0
- package/dist/migration/sign.js +331 -0
- package/dist/migration/sign.js.map +1 -0
- package/dist/migration/types.d.ts +92 -0
- package/dist/migration/types.d.ts.map +1 -0
- package/dist/migration/types.js +26 -0
- package/dist/migration/types.js.map +1 -0
- package/dist/reasoncodes.d.ts +42 -0
- package/dist/reasoncodes.d.ts.map +1 -0
- package/dist/reasoncodes.js +80 -0
- package/dist/reasoncodes.js.map +1 -0
- package/dist/recovery/bundle.d.ts +34 -0
- package/dist/recovery/bundle.d.ts.map +1 -0
- package/dist/recovery/bundle.js +144 -0
- package/dist/recovery/bundle.js.map +1 -0
- package/dist/recovery/bundle_crypto.d.ts +60 -0
- package/dist/recovery/bundle_crypto.d.ts.map +1 -0
- package/dist/recovery/bundle_crypto.js +179 -0
- package/dist/recovery/bundle_crypto.js.map +1 -0
- package/dist/recovery/bundle_store.d.ts +57 -0
- package/dist/recovery/bundle_store.d.ts.map +1 -0
- package/dist/recovery/bundle_store.js +104 -0
- package/dist/recovery/bundle_store.js.map +1 -0
- package/dist/recovery/index.d.ts +19 -0
- package/dist/recovery/index.d.ts.map +1 -0
- package/dist/recovery/index.js +19 -0
- package/dist/recovery/index.js.map +1 -0
- package/dist/recovery/manifest_crosscheck.d.ts +59 -0
- package/dist/recovery/manifest_crosscheck.d.ts.map +1 -0
- package/dist/recovery/manifest_crosscheck.js +59 -0
- package/dist/recovery/manifest_crosscheck.js.map +1 -0
- package/dist/recovery/shamir.d.ts +51 -0
- package/dist/recovery/shamir.d.ts.map +1 -0
- package/dist/recovery/shamir.js +181 -0
- package/dist/recovery/shamir.js.map +1 -0
- package/dist/recovery/sign.d.ts +61 -0
- package/dist/recovery/sign.d.ts.map +1 -0
- package/dist/recovery/sign.js +359 -0
- package/dist/recovery/sign.js.map +1 -0
- package/dist/recovery/types.d.ts +180 -0
- package/dist/recovery/types.d.ts.map +1 -0
- package/dist/recovery/types.js +31 -0
- package/dist/recovery/types.js.map +1 -0
- package/dist/reputation/abuse_report.d.ts +62 -0
- package/dist/reputation/abuse_report.d.ts.map +1 -0
- package/dist/reputation/abuse_report.js +111 -0
- package/dist/reputation/abuse_report.js.map +1 -0
- package/dist/reputation/bucketize.d.ts +31 -0
- package/dist/reputation/bucketize.d.ts.map +1 -0
- package/dist/reputation/bucketize.js +77 -0
- package/dist/reputation/bucketize.js.map +1 -0
- package/dist/reputation/gossip.d.ts +24 -0
- package/dist/reputation/gossip.d.ts.map +1 -0
- package/dist/reputation/gossip.js +64 -0
- package/dist/reputation/gossip.js.map +1 -0
- package/dist/reputation/gossip_fetch.d.ts +64 -0
- package/dist/reputation/gossip_fetch.d.ts.map +1 -0
- package/dist/reputation/gossip_fetch.js +114 -0
- package/dist/reputation/gossip_fetch.js.map +1 -0
- package/dist/reputation/index.d.ts +20 -0
- package/dist/reputation/index.d.ts.map +1 -0
- package/dist/reputation/index.js +20 -0
- package/dist/reputation/index.js.map +1 -0
- package/dist/reputation/observation_store.d.ts +67 -0
- package/dist/reputation/observation_store.d.ts.map +1 -0
- package/dist/reputation/observation_store.js +171 -0
- package/dist/reputation/observation_store.js.map +1 -0
- package/dist/reputation/pow.d.ts +91 -0
- package/dist/reputation/pow.d.ts.map +1 -0
- package/dist/reputation/pow.js +209 -0
- package/dist/reputation/pow.js.map +1 -0
- package/dist/reputation/sign.d.ts +40 -0
- package/dist/reputation/sign.d.ts.map +1 -0
- package/dist/reputation/sign.js +202 -0
- package/dist/reputation/sign.js.map +1 -0
- package/dist/reputation/types.d.ts +133 -0
- package/dist/reputation/types.d.ts.map +1 -0
- package/dist/reputation/types.js +33 -0
- package/dist/reputation/types.js.map +1 -0
- package/dist/reputation/whois.d.ts +25 -0
- package/dist/reputation/whois.d.ts.map +1 -0
- package/dist/reputation/whois.js +20 -0
- package/dist/reputation/whois.js.map +1 -0
- package/dist/seal/index.d.ts +8 -0
- package/dist/seal/index.d.ts.map +1 -0
- package/dist/seal/index.js +8 -0
- package/dist/seal/index.js.map +1 -0
- package/dist/seal/wrap.d.ts +74 -0
- package/dist/seal/wrap.d.ts.map +1 -0
- package/dist/seal/wrap.js +213 -0
- package/dist/seal/wrap.js.map +1 -0
- package/dist/session/dispatcher.d.ts +65 -0
- package/dist/session/dispatcher.d.ts.map +1 -0
- package/dist/session/dispatcher.js +96 -0
- package/dist/session/dispatcher.js.map +1 -0
- package/dist/session/index.d.ts +15 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +15 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/rekey.d.ts +108 -0
- package/dist/session/rekey.d.ts.map +1 -0
- package/dist/session/rekey.js +207 -0
- package/dist/session/rekey.js.map +1 -0
- package/dist/session/rekey_seal.d.ts +66 -0
- package/dist/session/rekey_seal.d.ts.map +1 -0
- package/dist/session/rekey_seal.js +153 -0
- package/dist/session/rekey_seal.js.map +1 -0
- package/dist/session/resume.d.ts +125 -0
- package/dist/session/resume.d.ts.map +1 -0
- package/dist/session/resume.js +263 -0
- package/dist/session/resume.js.map +1 -0
- package/dist/session/session.d.ts +136 -0
- package/dist/session/session.d.ts.map +1 -0
- package/dist/session/session.js +188 -0
- package/dist/session/session.js.map +1 -0
- package/dist/transparency/index.d.ts +13 -0
- package/dist/transparency/index.d.ts.map +1 -0
- package/dist/transparency/index.js +13 -0
- package/dist/transparency/index.js.map +1 -0
- package/dist/transparency/log.d.ts +61 -0
- package/dist/transparency/log.d.ts.map +1 -0
- package/dist/transparency/log.js +133 -0
- package/dist/transparency/log.js.map +1 -0
- package/dist/transparency/merkle.d.ts +59 -0
- package/dist/transparency/merkle.d.ts.map +1 -0
- package/dist/transparency/merkle.js +314 -0
- package/dist/transparency/merkle.js.map +1 -0
- package/dist/transparency/sign.d.ts +48 -0
- package/dist/transparency/sign.d.ts.map +1 -0
- package/dist/transparency/sign.js +140 -0
- package/dist/transparency/sign.js.map +1 -0
- package/dist/transparency/types.d.ts +97 -0
- package/dist/transparency/types.d.ts.map +1 -0
- package/dist/transparency/types.js +25 -0
- package/dist/transparency/types.js.map +1 -0
- package/dist/transport/h2.d.ts +163 -0
- package/dist/transport/h2.d.ts.map +1 -0
- package/dist/transport/h2.js +397 -0
- package/dist/transport/h2.js.map +1 -0
- package/dist/transport/index.d.ts +15 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +15 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/memory.d.ts +21 -0
- package/dist/transport/memory.d.ts.map +1 -0
- package/dist/transport/memory.js +112 -0
- package/dist/transport/memory.js.map +1 -0
- package/dist/transport/transport.d.ts +54 -0
- package/dist/transport/transport.d.ts.map +1 -0
- package/dist/transport/transport.js +20 -0
- package/dist/transport/transport.js.map +1 -0
- package/dist/transport/ws.d.ts +40 -0
- package/dist/transport/ws.d.ts.map +1 -0
- package/dist/transport/ws.js +204 -0
- package/dist/transport/ws.js.map +1 -0
- package/package.json +147 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seal-layer key wrap per ENVELOPE.md §4.4.1.
|
|
3
|
+
*
|
|
4
|
+
* The wrap protects a fresh symmetric key (K_brief or K_enclosure)
|
|
5
|
+
* for one recipient. The construction is HPKE-Base style:
|
|
6
|
+
*
|
|
7
|
+
* 1. KEM: encapsulate against the recipient's public key. For
|
|
8
|
+
* X25519 the encapsulation generates a fresh ephemeral and
|
|
9
|
+
* computes ECDH; for Kyber768+X25519 hybrid both halves run
|
|
10
|
+
* in parallel.
|
|
11
|
+
* 2. KDF: HKDF-SHA-512 over the shared secret with salt
|
|
12
|
+
* `kemCt || recipientPub` and info "SEMP-v1-wrap".
|
|
13
|
+
* 3. AEAD: zero nonce, recipient pub as AAD, plaintext = the
|
|
14
|
+
* symmetric key being wrapped. The zero nonce is safe because
|
|
15
|
+
* the wrap key is unique per call (fresh ephemeral feeds
|
|
16
|
+
* into the KDF).
|
|
17
|
+
*
|
|
18
|
+
* Output: `kemCt || aeadCt`, base64-encoded.
|
|
19
|
+
*
|
|
20
|
+
* @module
|
|
21
|
+
*/
|
|
22
|
+
import { aeadOpen, aeadSeal, hybridDecapsulate, Kyber768CiphertextSize, Kyber768PublicKeySize, kyber768EncapsulateDeterministic, newHKDFSHA512, x25519Agree, x25519PublicKey, X25519Size, } from "../crypto/index.js";
|
|
23
|
+
/** HKDF info context for the wrap-key expansion. */
|
|
24
|
+
export const WrapInfo = "SEMP-v1-wrap";
|
|
25
|
+
/**
|
|
26
|
+
* Unwrap a wrapped symmetric key per §4.4.1. Reverses the wrap
|
|
27
|
+
* computation: split kemCt from aeadCt by AEAD-overhead size,
|
|
28
|
+
* decapsulate, derive wrap_key, AEAD-open.
|
|
29
|
+
*
|
|
30
|
+
* @param suite negotiated suite that produced the wrap.
|
|
31
|
+
* @param recipientPrivateKey for X25519: 32 bytes; for hybrid:
|
|
32
|
+
* 2432 bytes (kyberPriv || x25519Priv per §4.4.1).
|
|
33
|
+
* @param recipientPublicKey for X25519: 32 bytes; for hybrid:
|
|
34
|
+
* 1216 bytes (kyberPub || x25519Pub per §4.4.1).
|
|
35
|
+
* @param wrappedB64 base64 of (kemCt || aeadCt).
|
|
36
|
+
*/
|
|
37
|
+
export function unwrap(suite, recipientPrivateKey, recipientPublicKey, wrappedB64) {
|
|
38
|
+
if (recipientPrivateKey.length === 0) {
|
|
39
|
+
throw new Error("seal: empty recipient private key");
|
|
40
|
+
}
|
|
41
|
+
if (recipientPublicKey.length === 0) {
|
|
42
|
+
throw new Error("seal: empty recipient public key");
|
|
43
|
+
}
|
|
44
|
+
const raw = base64Decode(wrappedB64);
|
|
45
|
+
const aead = suiteAEAD(suite);
|
|
46
|
+
// For both currently defined suites the wrapped symmetric key
|
|
47
|
+
// is 32 bytes (the AEAD key length); AEAD overhead is 16 bytes
|
|
48
|
+
// (Poly1305 tag); so aead_ct length is 48 bytes regardless of
|
|
49
|
+
// the K being wrapped.
|
|
50
|
+
const aeadCTLen = 32 + 16;
|
|
51
|
+
if (raw.length < aeadCTLen) {
|
|
52
|
+
throw new Error("seal: wrapped key truncated");
|
|
53
|
+
}
|
|
54
|
+
const kemCTLen = raw.length - aeadCTLen;
|
|
55
|
+
const kemCT = raw.slice(0, kemCTLen);
|
|
56
|
+
const aeadCT = raw.slice(kemCTLen);
|
|
57
|
+
const sharedSecret = decapsulate(suite, kemCT, recipientPrivateKey);
|
|
58
|
+
// KDF: salt = kemCt || recipientPublicKey, info = SEMP-v1-wrap.
|
|
59
|
+
const salt = concat(kemCT, recipientPublicKey);
|
|
60
|
+
const kdf = newHKDFSHA512();
|
|
61
|
+
const prk = kdf.extract(salt, sharedSecret);
|
|
62
|
+
const wrapKey = kdf.expand(prk, new TextEncoder().encode(WrapInfo), 32);
|
|
63
|
+
// AEAD: zero nonce, recipientPublicKey as AAD. The seal AEAD is
|
|
64
|
+
// ChaCha20-Poly1305 (12-byte nonce) regardless of suite — only
|
|
65
|
+
// the KEM is post-quantum on the PQ side. The `suite`-derived
|
|
66
|
+
// `aead` here is unused but kept for signature parity.
|
|
67
|
+
void aead;
|
|
68
|
+
const nonce = new Uint8Array(12);
|
|
69
|
+
return aeadOpen("chacha20-poly1305", wrapKey, nonce, aeadCT, recipientPublicKey);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Wrap `symmetricKey` for the given recipient under the negotiated
|
|
73
|
+
* suite. Production code path: uses the platform CSPRNG to generate
|
|
74
|
+
* a fresh ephemeral every call, which is what the §4.4.1 wrap
|
|
75
|
+
* construction requires — wrap-key uniqueness is what makes the
|
|
76
|
+
* zero-nonce AEAD safe.
|
|
77
|
+
*
|
|
78
|
+
* For deterministic byte-level reproducibility (vectors, audits),
|
|
79
|
+
* use {@link wrapWithRandomness} instead and pass pinned
|
|
80
|
+
* ephemeral inputs.
|
|
81
|
+
*/
|
|
82
|
+
export function wrap(suite, recipientPublicKey, symmetricKey) {
|
|
83
|
+
switch (suite) {
|
|
84
|
+
case "x25519-chacha20-poly1305": {
|
|
85
|
+
const ephPriv = randomBytes(X25519Size);
|
|
86
|
+
return wrapWithRandomness(suite, recipientPublicKey, symmetricKey, {
|
|
87
|
+
ephemeralX25519Priv: ephPriv,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
case "pq-kyber768-x25519": {
|
|
91
|
+
const ephPriv = randomBytes(X25519Size);
|
|
92
|
+
const kyberM = randomBytes(32);
|
|
93
|
+
return wrapWithRandomness(suite, recipientPublicKey, symmetricKey, {
|
|
94
|
+
ephemeralX25519Priv: ephPriv,
|
|
95
|
+
kyberEncapsRandomnessM: kyberM,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Deterministic wrap for vector reproduction and audits. Production
|
|
102
|
+
* code MUST use {@link wrap} (which sources fresh entropy) — a
|
|
103
|
+
* deterministic wrap that leaks `ephemeralX25519Priv` reduces to
|
|
104
|
+
* "the adversary has the wrap key". Exposed here only because
|
|
105
|
+
* cross-language vectors pin these inputs.
|
|
106
|
+
*
|
|
107
|
+
* Returns base64(kemCt || aeadCt) per ENVELOPE.md §4.4.1.
|
|
108
|
+
*/
|
|
109
|
+
export function wrapWithRandomness(suite, recipientPublicKey, symmetricKey, randomness) {
|
|
110
|
+
const { kemCT, sharedSecret } = encapsulate(suite, recipientPublicKey, randomness);
|
|
111
|
+
// KDF: salt = kemCt || recipientPublicKey, info = SEMP-v1-wrap.
|
|
112
|
+
const salt = concat(kemCT, recipientPublicKey);
|
|
113
|
+
const kdf = newHKDFSHA512();
|
|
114
|
+
const prk = kdf.extract(salt, sharedSecret);
|
|
115
|
+
const wrapKey = kdf.expand(prk, new TextEncoder().encode(WrapInfo), 32);
|
|
116
|
+
// AEAD: zero nonce, recipientPublicKey as AAD. Always
|
|
117
|
+
// ChaCha20-Poly1305 (12-byte nonce) regardless of suite — only
|
|
118
|
+
// the KEM is post-quantum on the PQ side.
|
|
119
|
+
const nonce = new Uint8Array(12);
|
|
120
|
+
const aeadCT = aeadSeal("chacha20-poly1305", wrapKey, nonce, symmetricKey, recipientPublicKey);
|
|
121
|
+
const wrapped = concat(kemCT, aeadCT);
|
|
122
|
+
return base64Encode(wrapped);
|
|
123
|
+
}
|
|
124
|
+
function encapsulate(suite, recipientPublicKey, randomness) {
|
|
125
|
+
switch (suite) {
|
|
126
|
+
case "x25519-chacha20-poly1305": {
|
|
127
|
+
// X25519 KEM: kemCT is the sender's ephemeral pub; shared
|
|
128
|
+
// secret is ECDH(ephPriv, recipientPub).
|
|
129
|
+
if (recipientPublicKey.length !== X25519Size) {
|
|
130
|
+
throw new Error(`seal: x25519 recipient pub must be ${X25519Size} bytes`);
|
|
131
|
+
}
|
|
132
|
+
const ephPub = x25519PublicKey(randomness.ephemeralX25519Priv);
|
|
133
|
+
const shared = x25519Agree(randomness.ephemeralX25519Priv, recipientPublicKey);
|
|
134
|
+
return { kemCT: ephPub, sharedSecret: shared };
|
|
135
|
+
}
|
|
136
|
+
case "pq-kyber768-x25519": {
|
|
137
|
+
// Hybrid: kyber half (encapsulate against recipient kyber pub
|
|
138
|
+
// with pinned m) + x25519 half (ephemeral ECDH against
|
|
139
|
+
// recipient x25519 pub). Wire layout: kyberCt || x25519EphPub
|
|
140
|
+
// for the ciphertext, kyberSS || x25519SS for the secret.
|
|
141
|
+
if (randomness.kyberEncapsRandomnessM === undefined) {
|
|
142
|
+
throw new Error("seal: PQ wrap requires kyberEncapsRandomnessM");
|
|
143
|
+
}
|
|
144
|
+
const kyberPub = recipientPublicKey.slice(0, Kyber768PublicKeySize);
|
|
145
|
+
const xPub = recipientPublicKey.slice(Kyber768PublicKeySize);
|
|
146
|
+
const { ciphertext: kyberCt, sharedSecret: kyberSS } = kyber768EncapsulateDeterministic(kyberPub, randomness.kyberEncapsRandomnessM);
|
|
147
|
+
const xEphPub = x25519PublicKey(randomness.ephemeralX25519Priv);
|
|
148
|
+
const xSS = x25519Agree(randomness.ephemeralX25519Priv, xPub);
|
|
149
|
+
const kemCT = new Uint8Array(Kyber768CiphertextSize + X25519Size);
|
|
150
|
+
kemCT.set(kyberCt, 0);
|
|
151
|
+
kemCT.set(xEphPub, Kyber768CiphertextSize);
|
|
152
|
+
const shared = new Uint8Array(64);
|
|
153
|
+
shared.set(kyberSS, 0);
|
|
154
|
+
shared.set(xSS, 32);
|
|
155
|
+
return { kemCT, sharedSecret: shared };
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function decapsulate(suite, kemCT, recipientPrivateKey) {
|
|
160
|
+
switch (suite) {
|
|
161
|
+
case "x25519-chacha20-poly1305":
|
|
162
|
+
// KEM ciphertext is the sender's ephemeral public key (32B);
|
|
163
|
+
// shared secret = ECDH(localPriv, ephPub).
|
|
164
|
+
if (kemCT.length !== 32) {
|
|
165
|
+
throw new Error(`seal: x25519 kemCT must be 32 bytes, got ${kemCT.length}`);
|
|
166
|
+
}
|
|
167
|
+
return x25519Agree(recipientPrivateKey, kemCT);
|
|
168
|
+
case "pq-kyber768-x25519":
|
|
169
|
+
return hybridDecapsulate(kemCT, recipientPrivateKey);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
function suiteAEAD(suite) {
|
|
173
|
+
switch (suite) {
|
|
174
|
+
case "x25519-chacha20-poly1305":
|
|
175
|
+
return "chacha20-poly1305";
|
|
176
|
+
case "pq-kyber768-x25519":
|
|
177
|
+
return "xchacha20-poly1305";
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
function concat(a, b) {
|
|
181
|
+
const out = new Uint8Array(a.length + b.length);
|
|
182
|
+
out.set(a, 0);
|
|
183
|
+
out.set(b, a.length);
|
|
184
|
+
return out;
|
|
185
|
+
}
|
|
186
|
+
function base64Decode(s) {
|
|
187
|
+
if (typeof Buffer !== "undefined") {
|
|
188
|
+
return new Uint8Array(Buffer.from(s, "base64"));
|
|
189
|
+
}
|
|
190
|
+
const bin = atob(s);
|
|
191
|
+
const out = new Uint8Array(bin.length);
|
|
192
|
+
for (let i = 0; i < bin.length; i++) {
|
|
193
|
+
out[i] = bin.charCodeAt(i);
|
|
194
|
+
}
|
|
195
|
+
return out;
|
|
196
|
+
}
|
|
197
|
+
function base64Encode(b) {
|
|
198
|
+
if (typeof Buffer !== "undefined") {
|
|
199
|
+
return Buffer.from(b).toString("base64");
|
|
200
|
+
}
|
|
201
|
+
let bin = "";
|
|
202
|
+
for (let i = 0; i < b.length; i++) {
|
|
203
|
+
bin += String.fromCharCode(b[i] ?? 0);
|
|
204
|
+
}
|
|
205
|
+
return btoa(bin);
|
|
206
|
+
}
|
|
207
|
+
function randomBytes(n) {
|
|
208
|
+
const out = new Uint8Array(n);
|
|
209
|
+
// Web Crypto is available in Node >= 19 and every modern browser.
|
|
210
|
+
globalThis.crypto.getRandomValues(out);
|
|
211
|
+
return out;
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=wrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrap.js","sourceRoot":"","sources":["../../src/seal/wrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session message dispatcher.
|
|
3
|
+
*
|
|
4
|
+
* Reads frames off a Session's transport in a loop, parses the
|
|
5
|
+
* outermost `type` field, and routes each frame to the matching
|
|
6
|
+
* caller-supplied handler. Designed for the long-running phase
|
|
7
|
+
* after a successful handshake — when the wire carries a mix of
|
|
8
|
+
* envelopes, sealed rekey messages, key-fetch requests, etc.
|
|
9
|
+
*
|
|
10
|
+
* The dispatcher does NOT verify envelope signatures or open
|
|
11
|
+
* sealed payloads itself; those are concerns of the per-type
|
|
12
|
+
* handlers. Its job is solely message-type fan-out and lifecycle.
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import type { Session } from "./session.js";
|
|
17
|
+
/** Handlers registered on a {@link runDispatcher} call. */
|
|
18
|
+
export interface DispatchHandlers {
|
|
19
|
+
/**
|
|
20
|
+
* Sealed rekey message. The dispatcher reads the bytes off the
|
|
21
|
+
* transport and invokes this with the JSON object (already
|
|
22
|
+
* parsed). Production callers route through {@link "./rekey".rekeyServer}
|
|
23
|
+
* by feeding the bytes back through their own transport-level
|
|
24
|
+
* input — see the dispatcher example in the README.
|
|
25
|
+
*/
|
|
26
|
+
onRekey?: (frame: Uint8Array, parsed: unknown) => Promise<void> | void;
|
|
27
|
+
/** A wire envelope (`type: SEMP_ENVELOPE`). */
|
|
28
|
+
onEnvelope?: (frame: Uint8Array, parsed: unknown) => Promise<void> | void;
|
|
29
|
+
/** A SEMP_KEYS request or response. */
|
|
30
|
+
onKeys?: (frame: Uint8Array, parsed: unknown) => Promise<void> | void;
|
|
31
|
+
/** A SEMP_DISCOVERY response delivered over an in-session channel. */
|
|
32
|
+
onDiscovery?: (frame: Uint8Array, parsed: unknown) => Promise<void> | void;
|
|
33
|
+
/** A SEMP_DELIVERY_ACK or SEMP_DELIVERY_RECEIPT. */
|
|
34
|
+
onDelivery?: (frame: Uint8Array, parsed: unknown) => Promise<void> | void;
|
|
35
|
+
/**
|
|
36
|
+
* Any frame whose `type` field doesn't match a registered
|
|
37
|
+
* handler. The default behavior (when this handler is not
|
|
38
|
+
* supplied) is to silently drop unknown types per the protocol
|
|
39
|
+
* forward-compatibility rule. Logging-level callers register
|
|
40
|
+
* this hook to surface unknowns at WARN.
|
|
41
|
+
*/
|
|
42
|
+
onUnknown?: (type: string, frame: Uint8Array) => Promise<void> | void;
|
|
43
|
+
/**
|
|
44
|
+
* Invoked on a non-fatal error inside a handler. The dispatcher
|
|
45
|
+
* loop continues — the caller MUST decide whether to close the
|
|
46
|
+
* session. If this is not supplied, handler errors are swallowed.
|
|
47
|
+
*/
|
|
48
|
+
onHandlerError?: (err: Error, type: string) => void;
|
|
49
|
+
/**
|
|
50
|
+
* Invoked on a fatal transport / parse error. The dispatcher
|
|
51
|
+
* exits its loop after calling this. If not supplied, the loop
|
|
52
|
+
* exits silently on fatal errors and {@link runDispatcher}
|
|
53
|
+
* resolves.
|
|
54
|
+
*/
|
|
55
|
+
onFatal?: (err: Error) => void;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Run the dispatcher loop. Resolves when the session closes
|
|
59
|
+
* cleanly (peer EOF) OR after a fatal error has been surfaced
|
|
60
|
+
* to {@link DispatchHandlers.onFatal}. Does NOT close the
|
|
61
|
+
* session; the caller decides whether to call `session.close()`
|
|
62
|
+
* after this resolves.
|
|
63
|
+
*/
|
|
64
|
+
export declare function runDispatcher(session: Session, handlers: DispatchHandlers): Promise<void>;
|
|
65
|
+
//# sourceMappingURL=dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/session/dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,2DAA2D;AAC3D,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEvE,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE1E,uCAAuC;IACvC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEtE,sEAAsE;IACtE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE3E,oDAAoD;IACpD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE1E;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEtE;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpD;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAuCf"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session message dispatcher.
|
|
3
|
+
*
|
|
4
|
+
* Reads frames off a Session's transport in a loop, parses the
|
|
5
|
+
* outermost `type` field, and routes each frame to the matching
|
|
6
|
+
* caller-supplied handler. Designed for the long-running phase
|
|
7
|
+
* after a successful handshake — when the wire carries a mix of
|
|
8
|
+
* envelopes, sealed rekey messages, key-fetch requests, etc.
|
|
9
|
+
*
|
|
10
|
+
* The dispatcher does NOT verify envelope signatures or open
|
|
11
|
+
* sealed payloads itself; those are concerns of the per-type
|
|
12
|
+
* handlers. Its job is solely message-type fan-out and lifecycle.
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Run the dispatcher loop. Resolves when the session closes
|
|
18
|
+
* cleanly (peer EOF) OR after a fatal error has been surfaced
|
|
19
|
+
* to {@link DispatchHandlers.onFatal}. Does NOT close the
|
|
20
|
+
* session; the caller decides whether to call `session.close()`
|
|
21
|
+
* after this resolves.
|
|
22
|
+
*/
|
|
23
|
+
export async function runDispatcher(session, handlers) {
|
|
24
|
+
while (true) {
|
|
25
|
+
let frame;
|
|
26
|
+
try {
|
|
27
|
+
frame = await session.receive();
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
handlers.onFatal?.(err instanceof Error ? err : new Error(String(err)));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (frame === null) {
|
|
34
|
+
// Clean EOF.
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
let parsed;
|
|
38
|
+
try {
|
|
39
|
+
parsed = JSON.parse(new TextDecoder().decode(frame));
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
handlers.onFatal?.(new Error(`dispatcher: malformed frame: ${err instanceof Error ? err.message : String(err)}`));
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const type = typeof parsed.type === "string"
|
|
46
|
+
? parsed.type
|
|
47
|
+
: "";
|
|
48
|
+
try {
|
|
49
|
+
await dispatchOne(type, frame, parsed, handlers);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
handlers.onHandlerError?.(err instanceof Error ? err : new Error(String(err)), type);
|
|
53
|
+
// Continue the loop; handler errors are non-fatal by default.
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function dispatchOne(type, frame, parsed, handlers) {
|
|
58
|
+
switch (type) {
|
|
59
|
+
case "SEMP_REKEY":
|
|
60
|
+
if (handlers.onRekey !== undefined) {
|
|
61
|
+
await handlers.onRekey(frame, parsed);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
break;
|
|
65
|
+
case "SEMP_ENVELOPE":
|
|
66
|
+
if (handlers.onEnvelope !== undefined) {
|
|
67
|
+
await handlers.onEnvelope(frame, parsed);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
break;
|
|
71
|
+
case "SEMP_KEYS":
|
|
72
|
+
if (handlers.onKeys !== undefined) {
|
|
73
|
+
await handlers.onKeys(frame, parsed);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
break;
|
|
77
|
+
case "SEMP_DISCOVERY":
|
|
78
|
+
if (handlers.onDiscovery !== undefined) {
|
|
79
|
+
await handlers.onDiscovery(frame, parsed);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
break;
|
|
83
|
+
case "SEMP_DELIVERY_ACK":
|
|
84
|
+
case "SEMP_DELIVERY_RECEIPT":
|
|
85
|
+
if (handlers.onDelivery !== undefined) {
|
|
86
|
+
await handlers.onDelivery(frame, parsed);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
if (handlers.onUnknown !== undefined) {
|
|
92
|
+
await handlers.onUnknown(type, frame);
|
|
93
|
+
}
|
|
94
|
+
// else silently drop, per protocol forward-compatibility.
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/session/dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session lifecycle layer per `SESSION.md`. Holds the post-handshake
|
|
3
|
+
* keys, TTL, transport, and permission set; lifts the runClient
|
|
4
|
+
* result into a usable session object.
|
|
5
|
+
*
|
|
6
|
+
* Future slices: rekey, resume, sequence-number tracking.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
export { type RekeyApply, type Role, type SessionConfig, Session, } from "./session.js";
|
|
11
|
+
export { type SealedRekey, openRekeyMessage, sealRekeyMessage, } from "./rekey_seal.js";
|
|
12
|
+
export { type RekeyAccepted, type RekeyClientOptions, type RekeyInit, type RekeyRejected, type RekeyServerOptions, RekeyRejectedError, rekeyClient, rekeyServer, } from "./rekey.js";
|
|
13
|
+
export { type ResumeAccepted, type ResumeClientConfig, type ResumeRequest, type ResumeServerConfig, type TicketLookupResult, resumeClient, resumeServer, } from "./resume.js";
|
|
14
|
+
export { type DispatchHandlers, runDispatcher } from "./dispatcher.js";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,KAAK,UAAU,EACf,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,OAAO,GACR,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,WAAW,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,kBAAkB,EAClB,WAAW,EACX,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,YAAY,EACZ,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session lifecycle layer per `SESSION.md`. Holds the post-handshake
|
|
3
|
+
* keys, TTL, transport, and permission set; lifts the runClient
|
|
4
|
+
* result into a usable session object.
|
|
5
|
+
*
|
|
6
|
+
* Future slices: rekey, resume, sequence-number tracking.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
export { Session, } from "./session.js";
|
|
11
|
+
export { openRekeyMessage, sealRekeyMessage, } from "./rekey_seal.js";
|
|
12
|
+
export { RekeyRejectedError, rekeyClient, rekeyServer, } from "./rekey.js";
|
|
13
|
+
export { resumeClient, resumeServer, } from "./resume.js";
|
|
14
|
+
export { runDispatcher } from "./dispatcher.js";
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAIL,OAAO,GACR,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAML,kBAAkB,EAClB,WAAW,EACX,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAML,YAAY,EACZ,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAyB,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rekey driver per SESSION.md §3.3.
|
|
3
|
+
*
|
|
4
|
+
* Both peers can initiate. The flow:
|
|
5
|
+
*
|
|
6
|
+
* 1. Initiator generates a new ephemeral X25519 keypair + a
|
|
7
|
+
* 32-byte rekey nonce. Builds RekeyInit, seals under the
|
|
8
|
+
* current session's directional keys, sends.
|
|
9
|
+
* 2. Responder receives + opens the sealed init. Generates its
|
|
10
|
+
* own new ephemeral + a 32-byte responder nonce + a new
|
|
11
|
+
* session_id. Computes the new shared secret via X25519,
|
|
12
|
+
* derives the five new session keys via HKDF-SHA-512 with
|
|
13
|
+
* salt = rekey_nonce || responder_nonce.
|
|
14
|
+
* 3. Responder builds RekeyAccepted, seals under the current
|
|
15
|
+
* session's directional keys, sends.
|
|
16
|
+
* 4. Both call session.applyRekey() to swap in the new keys
|
|
17
|
+
* and new session_id atomically.
|
|
18
|
+
*
|
|
19
|
+
* On rejection (session_expired, rekey_unsupported, rate_limited),
|
|
20
|
+
* the responder sends a sealed RekeyRejected; the caller sees a
|
|
21
|
+
* RekeyRejectedError.
|
|
22
|
+
*
|
|
23
|
+
* Rekey messages carry no separate identity signature: receiving
|
|
24
|
+
* a valid sealed message is itself authentication, since only a
|
|
25
|
+
* holder of the live session keys can forge one.
|
|
26
|
+
*
|
|
27
|
+
* @module
|
|
28
|
+
*/
|
|
29
|
+
import type { Session } from "./session.js";
|
|
30
|
+
/** Rekey-init message (decrypted body). */
|
|
31
|
+
export interface RekeyInit {
|
|
32
|
+
type: "SEMP_REKEY";
|
|
33
|
+
step: "rekey-init";
|
|
34
|
+
version: "1.0.0";
|
|
35
|
+
session_id: string;
|
|
36
|
+
new_ephemeral_key: {
|
|
37
|
+
algorithm: string;
|
|
38
|
+
key: string;
|
|
39
|
+
key_id: string;
|
|
40
|
+
};
|
|
41
|
+
rekey_nonce: string;
|
|
42
|
+
}
|
|
43
|
+
/** Rekey-accepted message (decrypted body). */
|
|
44
|
+
export interface RekeyAccepted {
|
|
45
|
+
type: "SEMP_REKEY";
|
|
46
|
+
step: "rekey-accepted";
|
|
47
|
+
version: "1.0.0";
|
|
48
|
+
session_id: string;
|
|
49
|
+
new_session_id: string;
|
|
50
|
+
new_ephemeral_key: {
|
|
51
|
+
algorithm: string;
|
|
52
|
+
key: string;
|
|
53
|
+
key_id: string;
|
|
54
|
+
};
|
|
55
|
+
rekey_nonce: string;
|
|
56
|
+
responder_nonce: string;
|
|
57
|
+
}
|
|
58
|
+
/** Rekey-rejected message (decrypted body). */
|
|
59
|
+
export interface RekeyRejected {
|
|
60
|
+
type: "SEMP_REKEY";
|
|
61
|
+
step: "rekey-rejected";
|
|
62
|
+
version: "1.0.0";
|
|
63
|
+
session_id: string;
|
|
64
|
+
reason_code: string;
|
|
65
|
+
reason?: string;
|
|
66
|
+
}
|
|
67
|
+
/** Error thrown when the responder rejects a rekey attempt. */
|
|
68
|
+
export declare class RekeyRejectedError extends Error {
|
|
69
|
+
readonly reasonCode: string;
|
|
70
|
+
readonly reason: string | undefined;
|
|
71
|
+
constructor(reasonCode: string, reason: string | undefined);
|
|
72
|
+
}
|
|
73
|
+
/** Inputs to the initiator side of rekey (deterministic-friendly). */
|
|
74
|
+
export interface RekeyClientOptions {
|
|
75
|
+
/** Optional pinned ephemeral private (32 bytes) for tests. */
|
|
76
|
+
ephemeralPriv?: Uint8Array;
|
|
77
|
+
/** Optional pinned 32-byte rekey nonce for tests. */
|
|
78
|
+
rekeyNonce?: Uint8Array;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Initiate a rekey. The session installs new keys + a new
|
|
82
|
+
* session_id on success and resolves with the new session_id.
|
|
83
|
+
*
|
|
84
|
+
* @throws RekeyRejectedError when the responder sends a sealed
|
|
85
|
+
* RekeyRejected.
|
|
86
|
+
*/
|
|
87
|
+
export declare function rekeyClient(session: Session, options?: RekeyClientOptions): Promise<string>;
|
|
88
|
+
/** Inputs to the responder side of rekey (deterministic-friendly). */
|
|
89
|
+
export interface RekeyServerOptions {
|
|
90
|
+
/** Optional pinned ephemeral private for tests. */
|
|
91
|
+
ephemeralPriv?: Uint8Array;
|
|
92
|
+
/** Optional pinned 32-byte responder nonce for tests. */
|
|
93
|
+
responderNonce?: Uint8Array;
|
|
94
|
+
/** Generator for the new session_id. Required for production. */
|
|
95
|
+
generateSessionId: () => string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Respond to a rekey. Reads one sealed message off the session
|
|
99
|
+
* transport, validates it as a RekeyInit, derives new keys,
|
|
100
|
+
* sends a sealed RekeyAccepted, and applies the rekey to the
|
|
101
|
+
* session. Resolves with the new session_id.
|
|
102
|
+
*
|
|
103
|
+
* Production callers wire this into their session-message
|
|
104
|
+
* dispatcher: when an inbound SEMP_REKEY arrives, route the
|
|
105
|
+
* sealed bytes here.
|
|
106
|
+
*/
|
|
107
|
+
export declare function rekeyServer(session: Session, options: RekeyServerOptions): Promise<string>;
|
|
108
|
+
//# sourceMappingURL=rekey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rekey.d.ts","sourceRoot":"","sources":["../../src/session/rekey.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAWH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAO5C,2CAA2C;AAC3C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,+DAA+D;AAC/D,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;gBACxB,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS;CAK3D;AAED,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,qDAAqD;IACrD,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAkEjB;AAED,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,yDAAyD;IACzD,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,iEAAiE;IACjE,iBAAiB,EAAE,MAAM,MAAM,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC,CA0DjB"}
|