@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,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operator-runnable transparency log per TRANSPARENCY.md §2.2.
|
|
3
|
+
*
|
|
4
|
+
* Maintains an append-only sequence of leaf hashes; issues
|
|
5
|
+
* SignedTreeHeads; computes RFC 6962 inclusion + consistency
|
|
6
|
+
* proofs against the current state.
|
|
7
|
+
*
|
|
8
|
+
* The reference implementation holds entries and leaf hashes in
|
|
9
|
+
* memory. Production deployments wrap a durable backend; the
|
|
10
|
+
* operations factor cleanly into a Store interface when needed.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import { type ConsistencyProof, type InclusionProof, type LogEntry, type SignedTreeHead } from "./types.js";
|
|
15
|
+
/** Inputs to the {@link Log} constructor. */
|
|
16
|
+
export interface LogConfig {
|
|
17
|
+
/** 32-byte Ed25519 secret seed used to sign every issued STH. */
|
|
18
|
+
domainSigningSeed: Uint8Array;
|
|
19
|
+
/** Lowercase-hex SHA-256 fingerprint of the domain signing pub. */
|
|
20
|
+
domainKeyId: string;
|
|
21
|
+
/** Wall-clock for STH timestamps. Defaults to `() => new Date()`. */
|
|
22
|
+
nowFn?: () => Date;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Append-only transparency log. Concurrency-safe under the JS
|
|
26
|
+
* single-threaded model: every method runs to completion before
|
|
27
|
+
* the next; no internal mutex needed.
|
|
28
|
+
*/
|
|
29
|
+
export declare class Log {
|
|
30
|
+
private readonly entries;
|
|
31
|
+
private readonly leaves;
|
|
32
|
+
private readonly cfg;
|
|
33
|
+
constructor(cfg: LogConfig);
|
|
34
|
+
/**
|
|
35
|
+
* Validate `entry`, hash its leaf, and append. Returns the
|
|
36
|
+
* assigned 0-based leaf index. Does NOT verify any signature on
|
|
37
|
+
* the entry — admission policy is the caller's concern.
|
|
38
|
+
*/
|
|
39
|
+
append(entry: LogEntry): number;
|
|
40
|
+
/** Current tree size. */
|
|
41
|
+
size(): number;
|
|
42
|
+
/**
|
|
43
|
+
* Return the entry at `index`, or `null` when out of range.
|
|
44
|
+
* The returned object is a reference; callers that mutate must
|
|
45
|
+
* clone first.
|
|
46
|
+
*/
|
|
47
|
+
entry(index: number): LogEntry | null;
|
|
48
|
+
/** Compute the current root hash and return a signed tree head. */
|
|
49
|
+
issueSTH(): SignedTreeHead;
|
|
50
|
+
/**
|
|
51
|
+
* RFC 6962 audit path for `leafIndex` against `treeSize`. Throws
|
|
52
|
+
* when `leafIndex >= treeSize` or `treeSize > size()`.
|
|
53
|
+
*/
|
|
54
|
+
inclusionProof(leafIndex: number, treeSize: number): InclusionProof;
|
|
55
|
+
/**
|
|
56
|
+
* RFC 6962 consistency proof from `firstSize` to `secondSize`.
|
|
57
|
+
* Both MUST be in `(0, size()]`; `firstSize` MUST be `<= secondSize`.
|
|
58
|
+
*/
|
|
59
|
+
consistencyProof(firstSize: number, secondSize: number): ConsistencyProof;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/transparency/log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAUpB,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACxB,iEAAiE;IACjE,iBAAiB,EAAE,UAAU,CAAC;IAC9B,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,GAAG;IACd,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;gBAEpB,GAAG,EAAE,SAAS;IAU1B;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;IAQ/B,yBAAyB;IACzB,IAAI,IAAI,MAAM;IAId;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAOrC,mEAAmE;IACnE,QAAQ,IAAI,cAAc;IAgB1B;;;OAGG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc;IAwBnE;;;OAGG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB;CA6B1E"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operator-runnable transparency log per TRANSPARENCY.md §2.2.
|
|
3
|
+
*
|
|
4
|
+
* Maintains an append-only sequence of leaf hashes; issues
|
|
5
|
+
* SignedTreeHeads; computes RFC 6962 inclusion + consistency
|
|
6
|
+
* proofs against the current state.
|
|
7
|
+
*
|
|
8
|
+
* The reference implementation holds entries and leaf hashes in
|
|
9
|
+
* memory. Production deployments wrap a durable backend; the
|
|
10
|
+
* operations factor cleanly into a Store interface when needed.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import {} from "./types.js";
|
|
15
|
+
import { auditPath, encodeHash, hashLeafFromEntry, subproof, subtreeRoot, } from "./merkle.js";
|
|
16
|
+
import { signSTH, validateLogEntry } from "./sign.js";
|
|
17
|
+
/**
|
|
18
|
+
* Append-only transparency log. Concurrency-safe under the JS
|
|
19
|
+
* single-threaded model: every method runs to completion before
|
|
20
|
+
* the next; no internal mutex needed.
|
|
21
|
+
*/
|
|
22
|
+
export class Log {
|
|
23
|
+
entries = [];
|
|
24
|
+
leaves = [];
|
|
25
|
+
cfg;
|
|
26
|
+
constructor(cfg) {
|
|
27
|
+
if (cfg.domainKeyId === "") {
|
|
28
|
+
throw new Error("transparency: log requires domainKeyId");
|
|
29
|
+
}
|
|
30
|
+
if (cfg.domainSigningSeed.length !== 32) {
|
|
31
|
+
throw new Error("transparency: log requires 32-byte domainSigningSeed");
|
|
32
|
+
}
|
|
33
|
+
this.cfg = cfg;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Validate `entry`, hash its leaf, and append. Returns the
|
|
37
|
+
* assigned 0-based leaf index. Does NOT verify any signature on
|
|
38
|
+
* the entry — admission policy is the caller's concern.
|
|
39
|
+
*/
|
|
40
|
+
append(entry) {
|
|
41
|
+
validateLogEntry(entry);
|
|
42
|
+
const leaf = hashLeafFromEntry(entry);
|
|
43
|
+
this.entries.push(entry);
|
|
44
|
+
this.leaves.push(leaf);
|
|
45
|
+
return this.leaves.length - 1;
|
|
46
|
+
}
|
|
47
|
+
/** Current tree size. */
|
|
48
|
+
size() {
|
|
49
|
+
return this.leaves.length;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Return the entry at `index`, or `null` when out of range.
|
|
53
|
+
* The returned object is a reference; callers that mutate must
|
|
54
|
+
* clone first.
|
|
55
|
+
*/
|
|
56
|
+
entry(index) {
|
|
57
|
+
if (!Number.isInteger(index) || index < 0 || index >= this.entries.length) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
return this.entries[index] ?? null;
|
|
61
|
+
}
|
|
62
|
+
/** Compute the current root hash and return a signed tree head. */
|
|
63
|
+
issueSTH() {
|
|
64
|
+
const root = subtreeRoot(this.leaves.slice());
|
|
65
|
+
const now = (this.cfg.nowFn ?? (() => new Date()))();
|
|
66
|
+
const preSign = {
|
|
67
|
+
log_size: this.leaves.length,
|
|
68
|
+
root_hash: encodeHash(root),
|
|
69
|
+
timestamp: isoSecond(now),
|
|
70
|
+
signature: { algorithm: "", key_id: "", value: "" },
|
|
71
|
+
};
|
|
72
|
+
return signSTH({
|
|
73
|
+
sth: preSign,
|
|
74
|
+
domainSigningSeed: this.cfg.domainSigningSeed,
|
|
75
|
+
domainKeyId: this.cfg.domainKeyId,
|
|
76
|
+
}).sth;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* RFC 6962 audit path for `leafIndex` against `treeSize`. Throws
|
|
80
|
+
* when `leafIndex >= treeSize` or `treeSize > size()`.
|
|
81
|
+
*/
|
|
82
|
+
inclusionProof(leafIndex, treeSize) {
|
|
83
|
+
if (!Number.isInteger(treeSize) || treeSize <= 0) {
|
|
84
|
+
throw new Error(`transparency: invalid treeSize ${treeSize}`);
|
|
85
|
+
}
|
|
86
|
+
if (treeSize > this.leaves.length) {
|
|
87
|
+
throw new Error(`transparency: treeSize ${treeSize} exceeds current size ${this.leaves.length}`);
|
|
88
|
+
}
|
|
89
|
+
if (!Number.isInteger(leafIndex) || leafIndex < 0 || leafIndex >= treeSize) {
|
|
90
|
+
throw new Error(`transparency: leafIndex ${leafIndex} out of [0, ${treeSize})`);
|
|
91
|
+
}
|
|
92
|
+
const leaves = this.leaves.slice(0, treeSize);
|
|
93
|
+
const siblings = auditPath(leafIndex, leaves);
|
|
94
|
+
return {
|
|
95
|
+
log_size: treeSize,
|
|
96
|
+
leaf_hash: encodeHash(leaves[leafIndex]),
|
|
97
|
+
leaf_index: leafIndex,
|
|
98
|
+
path: siblings.map(encodeHash),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* RFC 6962 consistency proof from `firstSize` to `secondSize`.
|
|
103
|
+
* Both MUST be in `(0, size()]`; `firstSize` MUST be `<= secondSize`.
|
|
104
|
+
*/
|
|
105
|
+
consistencyProof(firstSize, secondSize) {
|
|
106
|
+
if (!Number.isInteger(firstSize) ||
|
|
107
|
+
!Number.isInteger(secondSize) ||
|
|
108
|
+
firstSize <= 0 ||
|
|
109
|
+
secondSize <= 0) {
|
|
110
|
+
throw new Error(`transparency: invalid sizes (${firstSize}, ${secondSize})`);
|
|
111
|
+
}
|
|
112
|
+
if (firstSize > secondSize) {
|
|
113
|
+
throw new Error(`transparency: firstSize ${firstSize} > secondSize ${secondSize}`);
|
|
114
|
+
}
|
|
115
|
+
if (secondSize > this.leaves.length) {
|
|
116
|
+
throw new Error(`transparency: secondSize ${secondSize} exceeds current size ${this.leaves.length}`);
|
|
117
|
+
}
|
|
118
|
+
const second = this.leaves.slice(0, secondSize);
|
|
119
|
+
const path = subproof(firstSize, second, true);
|
|
120
|
+
return {
|
|
121
|
+
from_size: firstSize,
|
|
122
|
+
to_size: secondSize,
|
|
123
|
+
path: path.map(encodeHash),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function isoSecond(d) {
|
|
128
|
+
// Strip milliseconds — STH timestamps are second-precision per
|
|
129
|
+
// CONFORMANCE.md §9.3.
|
|
130
|
+
const iso = d.toISOString();
|
|
131
|
+
return iso.replace(/\.\d{3}Z$/, "Z");
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/transparency/log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC 6962 Merkle tree math for SEMP key transparency.
|
|
3
|
+
*
|
|
4
|
+
* The leaf hash is `SHA-256(0x00 || canonical_json_bytes)`; an
|
|
5
|
+
* interior node is `SHA-256(0x01 || left || right)`.
|
|
6
|
+
*
|
|
7
|
+
* This module covers:
|
|
8
|
+
* - {@link hashLeaf} / {@link hashInterior}: the per-node hash
|
|
9
|
+
* primitives
|
|
10
|
+
* - {@link verifyInclusionProof}: §3.1 audit-path verification
|
|
11
|
+
* - {@link verifyConsistencyProof}: §3.2 prefix verification
|
|
12
|
+
* - {@link subtreeRoot}, {@link auditPath}, {@link subproof}: the
|
|
13
|
+
* PROOF/PATH/SUBPROOF subroutines from RFC 6962 §2.1
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
import { type ConsistencyProof, type InclusionProof, type LogEntry } from "./types.js";
|
|
18
|
+
/**
|
|
19
|
+
* `SHA-256(0x00 || entryBytes)` per §2.2 / RFC 6962 §2.1. The
|
|
20
|
+
* caller MUST use the same canonical bytes the log producer used.
|
|
21
|
+
*/
|
|
22
|
+
export declare function hashLeaf(entryBytes: Uint8Array): Uint8Array;
|
|
23
|
+
/**
|
|
24
|
+
* Marshal `entry` to canonical JSON and return {@link hashLeaf} of
|
|
25
|
+
* the result.
|
|
26
|
+
*/
|
|
27
|
+
export declare function hashLeafFromEntry(entry: LogEntry): Uint8Array;
|
|
28
|
+
/** `SHA-256(0x01 || left || right)` per RFC 6962 §2.1. */
|
|
29
|
+
export declare function hashInterior(left: Uint8Array, right: Uint8Array): Uint8Array;
|
|
30
|
+
/**
|
|
31
|
+
* Verify `proof` against `rootHash` per RFC 6962 §2.1.1. Returns
|
|
32
|
+
* true on success.
|
|
33
|
+
*/
|
|
34
|
+
export declare function verifyInclusionProof(proof: InclusionProof, rootHash: Uint8Array): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Verify `proof` per RFC 6962 §2.1.2. Returns true when the proof
|
|
37
|
+
* attests that the tree of size `from_size` (with `firstRoot`) is a
|
|
38
|
+
* prefix of the tree of size `to_size` (with `secondRoot`).
|
|
39
|
+
*/
|
|
40
|
+
export declare function verifyConsistencyProof(proof: ConsistencyProof, firstRoot: Uint8Array, secondRoot: Uint8Array): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Largest power of 2 strictly less than `n`. Used by RFC 6962
|
|
43
|
+
* PATH and SUBPROOF construction.
|
|
44
|
+
*/
|
|
45
|
+
export declare function largestPowerOfTwoLessThan(n: number): number;
|
|
46
|
+
/**
|
|
47
|
+
* MTH(D[0:n]) per RFC 6962 §2.1. An empty input returns the all-zeros
|
|
48
|
+
* 32-byte hash; the spec actually defines MTH(empty) = SHA-256("")
|
|
49
|
+
* but inclusion / consistency proofs never operate on an empty
|
|
50
|
+
* subtree directly.
|
|
51
|
+
*/
|
|
52
|
+
export declare function subtreeRoot(leaves: Uint8Array[]): Uint8Array;
|
|
53
|
+
/** PATH(m, D[0:n]) per RFC 6962 §2.1.1. */
|
|
54
|
+
export declare function auditPath(m: number, leaves: Uint8Array[]): Uint8Array[];
|
|
55
|
+
/** SUBPROOF(m, D[0:n], b) per RFC 6962 §2.1.2. */
|
|
56
|
+
export declare function subproof(m: number, leaves: Uint8Array[], b: boolean): Uint8Array[];
|
|
57
|
+
/** Base64-encode a 32-byte hash for the wire form. */
|
|
58
|
+
export declare function encodeHash(h: Uint8Array): string;
|
|
59
|
+
//# sourceMappingURL=merkle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merkle.d.ts","sourceRoot":"","sources":["../../src/transparency/merkle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,QAAQ,EAGd,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAK3D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,GAAG,UAAU,CAE7D;AAED,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAM5E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,UAAU,GACnB,OAAO,CA2BT;AAsCD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,gBAAgB,EACvB,SAAS,EAAE,UAAU,EACrB,UAAU,EAAE,UAAU,GACrB,OAAO,CAsCT;AAwDD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAS3D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAW5D;AAED,2CAA2C;AAC3C,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAavE;AAED,kDAAkD;AAClD,wBAAgB,QAAQ,CACtB,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,UAAU,EAAE,EACpB,CAAC,EAAE,OAAO,GACT,UAAU,EAAE,CAgBd;AAKD,sDAAsD;AACtD,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAKhD"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC 6962 Merkle tree math for SEMP key transparency.
|
|
3
|
+
*
|
|
4
|
+
* The leaf hash is `SHA-256(0x00 || canonical_json_bytes)`; an
|
|
5
|
+
* interior node is `SHA-256(0x01 || left || right)`.
|
|
6
|
+
*
|
|
7
|
+
* This module covers:
|
|
8
|
+
* - {@link hashLeaf} / {@link hashInterior}: the per-node hash
|
|
9
|
+
* primitives
|
|
10
|
+
* - {@link verifyInclusionProof}: §3.1 audit-path verification
|
|
11
|
+
* - {@link verifyConsistencyProof}: §3.2 prefix verification
|
|
12
|
+
* - {@link subtreeRoot}, {@link auditPath}, {@link subproof}: the
|
|
13
|
+
* PROOF/PATH/SUBPROOF subroutines from RFC 6962 §2.1
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
import { sha256 } from "@noble/hashes/sha2.js";
|
|
18
|
+
import { marshal as canonicalMarshal } from "../canonical/index.js";
|
|
19
|
+
import { InteriorPrefix, LeafPrefix, } from "./types.js";
|
|
20
|
+
/**
|
|
21
|
+
* `SHA-256(0x00 || entryBytes)` per §2.2 / RFC 6962 §2.1. The
|
|
22
|
+
* caller MUST use the same canonical bytes the log producer used.
|
|
23
|
+
*/
|
|
24
|
+
export function hashLeaf(entryBytes) {
|
|
25
|
+
const buf = new Uint8Array(1 + entryBytes.length);
|
|
26
|
+
buf[0] = LeafPrefix;
|
|
27
|
+
buf.set(entryBytes, 1);
|
|
28
|
+
return sha256(buf);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Marshal `entry` to canonical JSON and return {@link hashLeaf} of
|
|
32
|
+
* the result.
|
|
33
|
+
*/
|
|
34
|
+
export function hashLeafFromEntry(entry) {
|
|
35
|
+
return hashLeaf(canonicalMarshal(entry));
|
|
36
|
+
}
|
|
37
|
+
/** `SHA-256(0x01 || left || right)` per RFC 6962 §2.1. */
|
|
38
|
+
export function hashInterior(left, right) {
|
|
39
|
+
const buf = new Uint8Array(1 + 32 + 32);
|
|
40
|
+
buf[0] = InteriorPrefix;
|
|
41
|
+
buf.set(left, 1);
|
|
42
|
+
buf.set(right, 33);
|
|
43
|
+
return sha256(buf);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Verify `proof` against `rootHash` per RFC 6962 §2.1.1. Returns
|
|
47
|
+
* true on success.
|
|
48
|
+
*/
|
|
49
|
+
export function verifyInclusionProof(proof, rootHash) {
|
|
50
|
+
if (proof.log_size <= 0) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
if (proof.leaf_index < 0 || proof.leaf_index >= proof.log_size) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
let leaf;
|
|
57
|
+
let siblings;
|
|
58
|
+
try {
|
|
59
|
+
leaf = decodeHash(proof.leaf_hash);
|
|
60
|
+
siblings = decodeHashes(proof.path);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
let computed;
|
|
66
|
+
try {
|
|
67
|
+
computed = computeRootFromInclusion(proof.leaf_index, proof.log_size, leaf, siblings);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
return bytesEqual(computed, rootHash);
|
|
73
|
+
}
|
|
74
|
+
function computeRootFromInclusion(leafIndex, treeSize, leaf, siblings) {
|
|
75
|
+
let fn = leafIndex;
|
|
76
|
+
let sn = treeSize - 1;
|
|
77
|
+
let r = leaf;
|
|
78
|
+
let pathIdx = 0;
|
|
79
|
+
while (sn > 0) {
|
|
80
|
+
if (pathIdx >= siblings.length) {
|
|
81
|
+
throw new Error("transparency: inclusion proof too short");
|
|
82
|
+
}
|
|
83
|
+
const s = siblings[pathIdx];
|
|
84
|
+
pathIdx++;
|
|
85
|
+
if ((fn & 1) === 1 || fn === sn) {
|
|
86
|
+
r = hashInterior(s, r);
|
|
87
|
+
while (fn !== 0 && (fn & 1) === 0) {
|
|
88
|
+
fn >>>= 1;
|
|
89
|
+
sn >>>= 1;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
r = hashInterior(r, s);
|
|
94
|
+
}
|
|
95
|
+
fn >>>= 1;
|
|
96
|
+
sn >>>= 1;
|
|
97
|
+
}
|
|
98
|
+
if (pathIdx !== siblings.length) {
|
|
99
|
+
throw new Error(`transparency: inclusion proof has ${siblings.length - pathIdx} unused siblings`);
|
|
100
|
+
}
|
|
101
|
+
return r;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Verify `proof` per RFC 6962 §2.1.2. Returns true when the proof
|
|
105
|
+
* attests that the tree of size `from_size` (with `firstRoot`) is a
|
|
106
|
+
* prefix of the tree of size `to_size` (with `secondRoot`).
|
|
107
|
+
*/
|
|
108
|
+
export function verifyConsistencyProof(proof, firstRoot, secondRoot) {
|
|
109
|
+
if (proof.from_size < 0 || proof.to_size < 0) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
if (proof.from_size > proof.to_size) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
if (proof.from_size === proof.to_size) {
|
|
116
|
+
if (proof.path.length !== 0) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
return bytesEqual(firstRoot, secondRoot);
|
|
120
|
+
}
|
|
121
|
+
if (proof.from_size === 0) {
|
|
122
|
+
// Trivially consistent; path expected empty per RFC 6962.
|
|
123
|
+
return proof.path.length === 0;
|
|
124
|
+
}
|
|
125
|
+
let siblings;
|
|
126
|
+
try {
|
|
127
|
+
siblings = decodeHashes(proof.path);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
let recomputed;
|
|
133
|
+
try {
|
|
134
|
+
recomputed = computeRootsFromConsistency(proof.from_size, proof.to_size, firstRoot, siblings);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
return (bytesEqual(recomputed.first, firstRoot) &&
|
|
140
|
+
bytesEqual(recomputed.second, secondRoot));
|
|
141
|
+
}
|
|
142
|
+
function computeRootsFromConsistency(firstSize, secondSize, firstRoot, path) {
|
|
143
|
+
let fn = firstSize - 1;
|
|
144
|
+
let sn = secondSize - 1;
|
|
145
|
+
while ((fn & 1) === 1) {
|
|
146
|
+
fn >>>= 1;
|
|
147
|
+
sn >>>= 1;
|
|
148
|
+
}
|
|
149
|
+
let fr;
|
|
150
|
+
let sr;
|
|
151
|
+
let pathIdx = 0;
|
|
152
|
+
if (fn !== 0) {
|
|
153
|
+
if (pathIdx >= path.length) {
|
|
154
|
+
throw new Error("transparency: consistency proof too short");
|
|
155
|
+
}
|
|
156
|
+
fr = path[pathIdx];
|
|
157
|
+
sr = path[pathIdx];
|
|
158
|
+
pathIdx++;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
fr = firstRoot;
|
|
162
|
+
sr = firstRoot;
|
|
163
|
+
}
|
|
164
|
+
while (sn > 0) {
|
|
165
|
+
if (pathIdx >= path.length) {
|
|
166
|
+
throw new Error("transparency: consistency proof too short");
|
|
167
|
+
}
|
|
168
|
+
const c = path[pathIdx];
|
|
169
|
+
pathIdx++;
|
|
170
|
+
if ((fn & 1) === 1 || fn === sn) {
|
|
171
|
+
fr = hashInterior(c, fr);
|
|
172
|
+
sr = hashInterior(c, sr);
|
|
173
|
+
while (fn !== 0 && (fn & 1) === 0) {
|
|
174
|
+
fn >>>= 1;
|
|
175
|
+
sn >>>= 1;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
sr = hashInterior(sr, c);
|
|
180
|
+
}
|
|
181
|
+
fn >>>= 1;
|
|
182
|
+
sn >>>= 1;
|
|
183
|
+
}
|
|
184
|
+
if (pathIdx !== path.length) {
|
|
185
|
+
throw new Error(`transparency: consistency proof has ${path.length - pathIdx} unused hashes`);
|
|
186
|
+
}
|
|
187
|
+
return { first: fr, second: sr };
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Largest power of 2 strictly less than `n`. Used by RFC 6962
|
|
191
|
+
* PATH and SUBPROOF construction.
|
|
192
|
+
*/
|
|
193
|
+
export function largestPowerOfTwoLessThan(n) {
|
|
194
|
+
if (n <= 1) {
|
|
195
|
+
return 0;
|
|
196
|
+
}
|
|
197
|
+
let k = 1;
|
|
198
|
+
while (k * 2 < n) {
|
|
199
|
+
k *= 2;
|
|
200
|
+
}
|
|
201
|
+
return k;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* MTH(D[0:n]) per RFC 6962 §2.1. An empty input returns the all-zeros
|
|
205
|
+
* 32-byte hash; the spec actually defines MTH(empty) = SHA-256("")
|
|
206
|
+
* but inclusion / consistency proofs never operate on an empty
|
|
207
|
+
* subtree directly.
|
|
208
|
+
*/
|
|
209
|
+
export function subtreeRoot(leaves) {
|
|
210
|
+
if (leaves.length === 0) {
|
|
211
|
+
return new Uint8Array(32);
|
|
212
|
+
}
|
|
213
|
+
if (leaves.length === 1) {
|
|
214
|
+
return leaves[0];
|
|
215
|
+
}
|
|
216
|
+
const k = largestPowerOfTwoLessThan(leaves.length);
|
|
217
|
+
const left = subtreeRoot(leaves.slice(0, k));
|
|
218
|
+
const right = subtreeRoot(leaves.slice(k));
|
|
219
|
+
return hashInterior(left, right);
|
|
220
|
+
}
|
|
221
|
+
/** PATH(m, D[0:n]) per RFC 6962 §2.1.1. */
|
|
222
|
+
export function auditPath(m, leaves) {
|
|
223
|
+
const n = leaves.length;
|
|
224
|
+
if (n <= 1) {
|
|
225
|
+
return [];
|
|
226
|
+
}
|
|
227
|
+
const k = largestPowerOfTwoLessThan(n);
|
|
228
|
+
if (m < k) {
|
|
229
|
+
return [...auditPath(m, leaves.slice(0, k)), subtreeRoot(leaves.slice(k))];
|
|
230
|
+
}
|
|
231
|
+
return [
|
|
232
|
+
...auditPath(m - k, leaves.slice(k)),
|
|
233
|
+
subtreeRoot(leaves.slice(0, k)),
|
|
234
|
+
];
|
|
235
|
+
}
|
|
236
|
+
/** SUBPROOF(m, D[0:n], b) per RFC 6962 §2.1.2. */
|
|
237
|
+
export function subproof(m, leaves, b) {
|
|
238
|
+
const n = leaves.length;
|
|
239
|
+
if (m === n) {
|
|
240
|
+
if (b) {
|
|
241
|
+
return [];
|
|
242
|
+
}
|
|
243
|
+
return [subtreeRoot(leaves)];
|
|
244
|
+
}
|
|
245
|
+
const k = largestPowerOfTwoLessThan(n);
|
|
246
|
+
if (m <= k) {
|
|
247
|
+
return [...subproof(m, leaves.slice(0, k), b), subtreeRoot(leaves.slice(k))];
|
|
248
|
+
}
|
|
249
|
+
return [
|
|
250
|
+
...subproof(m - k, leaves.slice(k), false),
|
|
251
|
+
subtreeRoot(leaves.slice(0, k)),
|
|
252
|
+
];
|
|
253
|
+
}
|
|
254
|
+
// ---------------------------------------------------------------------------
|
|
255
|
+
// Helpers
|
|
256
|
+
/** Base64-encode a 32-byte hash for the wire form. */
|
|
257
|
+
export function encodeHash(h) {
|
|
258
|
+
if (h.length !== 32) {
|
|
259
|
+
throw new Error(`transparency: hash length ${h.length}, want 32`);
|
|
260
|
+
}
|
|
261
|
+
return base64Encode(h);
|
|
262
|
+
}
|
|
263
|
+
function decodeHash(s) {
|
|
264
|
+
const out = base64Decode(s);
|
|
265
|
+
if (out.length !== 32) {
|
|
266
|
+
throw new Error(`transparency: hash length ${out.length}, want 32`);
|
|
267
|
+
}
|
|
268
|
+
return out;
|
|
269
|
+
}
|
|
270
|
+
function decodeHashes(items) {
|
|
271
|
+
const out = [];
|
|
272
|
+
for (let i = 0; i < items.length; i++) {
|
|
273
|
+
try {
|
|
274
|
+
out.push(decodeHash(items[i] ?? ""));
|
|
275
|
+
}
|
|
276
|
+
catch (err) {
|
|
277
|
+
throw new Error(`transparency: path[${i}]: ${err instanceof Error ? err.message : String(err)}`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return out;
|
|
281
|
+
}
|
|
282
|
+
function bytesEqual(a, b) {
|
|
283
|
+
if (a.length !== b.length) {
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
for (let i = 0; i < a.length; i++) {
|
|
287
|
+
if (a[i] !== b[i]) {
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return true;
|
|
292
|
+
}
|
|
293
|
+
function base64Encode(b) {
|
|
294
|
+
if (typeof Buffer !== "undefined") {
|
|
295
|
+
return Buffer.from(b).toString("base64");
|
|
296
|
+
}
|
|
297
|
+
let bin = "";
|
|
298
|
+
for (let i = 0; i < b.length; i++) {
|
|
299
|
+
bin += String.fromCharCode(b[i] ?? 0);
|
|
300
|
+
}
|
|
301
|
+
return btoa(bin);
|
|
302
|
+
}
|
|
303
|
+
function base64Decode(s) {
|
|
304
|
+
if (typeof Buffer !== "undefined") {
|
|
305
|
+
return new Uint8Array(Buffer.from(s, "base64"));
|
|
306
|
+
}
|
|
307
|
+
const bin = atob(s);
|
|
308
|
+
const out = new Uint8Array(bin.length);
|
|
309
|
+
for (let i = 0; i < bin.length; i++) {
|
|
310
|
+
out[i] = bin.charCodeAt(i);
|
|
311
|
+
}
|
|
312
|
+
return out;
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=merkle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merkle.js","sourceRoot":"","sources":["../../src/transparency/merkle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* STH signing + verification + freshness checks per
|
|
3
|
+
* TRANSPARENCY.md §2.3.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import { type LogEntry, type SignedTreeHead } from "./types.js";
|
|
8
|
+
/** Domain-separation prefix per ENVELOPE.md §4.3. */
|
|
9
|
+
export declare const TransparencySTHPrefix = "SEMP-TRANSPARENCY-STH:";
|
|
10
|
+
/** Only signature algorithm defined for STH signatures. */
|
|
11
|
+
export declare const SignatureAlgorithmEd25519 = "ed25519";
|
|
12
|
+
/** Inputs to {@link signSTH}. */
|
|
13
|
+
export interface SignSTHInput {
|
|
14
|
+
/** Pre-sign STH; `signature.value` will be replaced. */
|
|
15
|
+
sth: SignedTreeHead;
|
|
16
|
+
/** 32-byte Ed25519 secret seed for the domain signing key. */
|
|
17
|
+
domainSigningSeed: Uint8Array;
|
|
18
|
+
/** Lowercase-hex SHA-256 fingerprint of the domain signing pub. */
|
|
19
|
+
domainKeyId: string;
|
|
20
|
+
}
|
|
21
|
+
/** Result of a successful {@link signSTH}. */
|
|
22
|
+
export interface SignSTHResult {
|
|
23
|
+
sth: SignedTreeHead;
|
|
24
|
+
signatureB64: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build and Ed25519-sign an STH per §2.3. Pre-populates
|
|
28
|
+
* `signature.{algorithm,key_id}` so the canonical bytes cover them
|
|
29
|
+
* (defense against algorithm/issuer downgrade).
|
|
30
|
+
*/
|
|
31
|
+
export declare function signSTH(input: SignSTHInput): SignSTHResult;
|
|
32
|
+
/**
|
|
33
|
+
* Ed25519-verify an STH's signature against `domainPub`. Returns
|
|
34
|
+
* true on success. Does NOT enforce staleness; pair with
|
|
35
|
+
* {@link checkSTHFresh} for the §2.3 1-hour bound.
|
|
36
|
+
*/
|
|
37
|
+
export declare function verifySTH(sth: SignedTreeHead, domainPub: Uint8Array): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Enforce §2.3 freshness: reject STHs whose timestamp is more than
|
|
40
|
+
* {@link MaxSTHFreshnessMs} old. Returns true when the STH is
|
|
41
|
+
* fresh under the supplied `now`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function checkSTHFresh(sth: SignedTreeHead, now: Date): boolean;
|
|
44
|
+
/** Structural validation of `sth` per §2.3. Throws on first violation. */
|
|
45
|
+
export declare function validateSTH(sth: SignedTreeHead): void;
|
|
46
|
+
/** Structural validation of a {@link LogEntry} per §2.2. Throws on first violation. */
|
|
47
|
+
export declare function validateLogEntry(e: LogEntry): void;
|
|
48
|
+
//# sourceMappingURL=sign.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/transparency/sign.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,cAAc,EAEpB,MAAM,YAAY,CAAC;AAEpB,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAE9D,2DAA2D;AAC3D,eAAO,MAAM,yBAAyB,YAAY,CAAC;AAEnD,iCAAiC;AACjC,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,GAAG,EAAE,cAAc,CAAC;IACpB,8DAA8D;IAC9D,iBAAiB,EAAE,UAAU,CAAC;IAC9B,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,8CAA8C;AAC9C,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,cAAc,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAwB1D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,cAAc,EACnB,SAAS,EAAE,UAAU,GACpB,OAAO,CAYT;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,GAAG,OAAO,CAMrE;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAsBrD;AAED,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAgDlD"}
|