keri-ts 0.11.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -2
- package/esm/keri/npm/src/_dnt.polyfills.js +36 -0
- package/esm/keri/npm/src/acdc/chaining.js +213 -0
- package/esm/keri/npm/src/acdc/dhking.js +716 -0
- package/esm/keri/npm/src/acdc/messaging.js +2 -0
- package/esm/keri/npm/src/acdc/observing.js +47 -40
- package/esm/keri/npm/src/acdc/regbasing.js +22 -22
- package/esm/keri/npm/src/acdc/regengine.js +88 -119
- package/esm/keri/npm/src/acdc/regeventing.js +163 -44
- package/esm/keri/npm/src/acdc/registering.js +99 -23
- package/esm/keri/npm/src/acdc/registraring.js +82 -46
- package/esm/keri/npm/src/acdc/relating.js +59 -0
- package/esm/keri/npm/src/acdc/salting.js +720 -0
- package/esm/keri/npm/src/acdc/scheming.js +103 -105
- package/esm/keri/npm/src/acdc/unblinding.js +1042 -0
- package/esm/keri/npm/src/app/{authenticating.js → bootstrap/authenticating.js} +40 -39
- package/esm/keri/npm/src/app/bootstrap/bootstrapping.js +109 -0
- package/esm/keri/npm/src/app/bootstrap/oobi-replies.js +113 -0
- package/esm/keri/npm/src/app/{oobiery.js → bootstrap/oobiery.js} +211 -267
- package/esm/keri/npm/src/app/credentials/credential-importing.js +201 -0
- package/esm/keri/npm/src/app/credentials/credential-proposals.js +120 -0
- package/esm/keri/npm/src/app/credentials/credential-revoking.js +165 -0
- package/esm/keri/npm/src/app/credentials/credential-workflows.js +365 -0
- package/esm/keri/npm/src/app/credentials/tel-publishing.js +27 -0
- package/esm/keri/npm/src/app/{verifying.js → credentials/verifying.js} +50 -45
- package/esm/keri/npm/src/app/delivery/forwarding.js +600 -0
- package/esm/keri/npm/src/app/delivery/introducing.js +68 -0
- package/esm/keri/npm/src/app/delivery/reply-streams.js +230 -0
- package/esm/keri/npm/src/app/delivery/respondant.js +159 -0
- package/esm/keri/npm/src/app/delivery/stored-replies.js +53 -0
- package/esm/keri/npm/src/app/exchanges/essr.js +111 -0
- package/esm/keri/npm/src/app/exchanges/exchange-messaging.js +66 -0
- package/esm/keri/npm/src/app/exchanges/exchanging.js +1354 -0
- package/esm/keri/npm/src/app/{challenging.js → identity/challenging.js} +13 -8
- package/esm/keri/npm/src/app/{configing.js → identity/configing.js} +4 -4
- package/esm/keri/npm/src/app/{delegating.js → identity/delegating.js} +118 -40
- package/esm/keri/npm/src/app/{endpoint-roleing.js → identity/endpoint-roleing.js} +43 -39
- package/esm/keri/npm/src/app/{habbing.js → identity/habbing.js} +258 -226
- package/esm/keri/npm/src/app/{keeping.js → identity/keeping.js} +60 -56
- package/esm/keri/npm/src/app/{organizing.js → identity/organizing.js} +47 -21
- package/esm/keri/npm/src/app/{ipex-building.js → ipex/ipex-building.js} +53 -55
- package/esm/keri/npm/src/app/ipex/ipex-credentialing.js +359 -0
- package/esm/keri/npm/src/app/{ipex-graph.js → ipex/ipex-graph.js} +70 -124
- package/esm/keri/npm/src/app/ipex/ipex-grouping.js +664 -0
- package/esm/keri/npm/src/app/ipex/ipex-node-authentication.js +185 -0
- package/esm/keri/npm/src/app/ipex/ipex-v2.js +692 -0
- package/esm/keri/npm/src/app/{ipexing.js → ipex/ipexing.js} +59 -10
- package/esm/keri/npm/src/app/mailbox/forward-handler.js +228 -0
- package/esm/keri/npm/src/app/{mailbox-director.js → mailbox/mailbox-director.js} +146 -139
- package/esm/keri/npm/src/app/mailbox/mailbox-poller.js +305 -0
- package/esm/keri/npm/src/app/mailbox/mailbox-sse.js +254 -0
- package/esm/keri/npm/src/app/{mailboxing.js → mailbox/mailboxing.js} +117 -70
- package/esm/keri/npm/src/app/mailbox/topic-routing.js +54 -0
- package/esm/keri/npm/src/app/multisig/group-members.js +173 -0
- package/esm/keri/npm/src/app/multisig/grouping.js +932 -0
- package/esm/keri/npm/src/app/multisig/multisig-messaging.js +164 -0
- package/esm/keri/npm/src/app/multisig/multisig-workflows.js +821 -0
- package/esm/keri/npm/src/app/{notifying.js → notifications/notifying.js} +23 -50
- package/esm/keri/npm/src/app/notifications/signaling.js +177 -0
- package/esm/keri/npm/src/app/{parsering.js → protocol/parsering.js} +123 -53
- package/esm/keri/npm/src/app/protocol/protocol-processing.js +245 -0
- package/esm/keri/npm/src/app/protocol/reactor.js +55 -0
- package/esm/keri/npm/src/app/queries/query-replies.js +151 -0
- package/esm/keri/npm/src/app/queries/querying.js +306 -0
- package/esm/keri/npm/src/app/queries/witness-inquisitor.js +415 -0
- package/esm/keri/npm/src/app/runtime/abortable.js +103 -0
- package/esm/keri/npm/src/app/runtime/agent-runtime.js +633 -0
- package/esm/keri/npm/src/app/runtime/cue-runtime.js +61 -0
- package/esm/keri/npm/src/app/runtime/runtime-clock.js +6 -0
- package/esm/keri/npm/src/app/{byte-source.js → transport/byte-source.js} +43 -21
- package/esm/keri/npm/src/app/transport/cesr-egress.js +317 -0
- package/esm/keri/npm/src/app/{cesr-http.js → transport/cesr-http.js} +28 -78
- package/esm/keri/npm/src/app/transport/http-client.js +172 -0
- package/esm/keri/npm/src/app/transport/http-messenger.js +52 -0
- package/esm/keri/npm/src/app/transport/http-stream-messenger.js +60 -0
- package/esm/keri/npm/src/app/transport/httping.js +57 -0
- package/esm/keri/npm/src/app/transport/message-source.js +77 -0
- package/esm/keri/npm/src/app/transport/messengering.js +68 -0
- package/esm/keri/npm/src/app/{socket-source.js → transport/socket-source.js} +41 -5
- package/esm/keri/npm/src/app/transport/tcp-egress.js +377 -0
- package/esm/keri/npm/src/app/transport/tcp-messenger.js +162 -0
- package/esm/keri/npm/src/app/transport/tcp-stream-messenger.js +40 -0
- package/esm/keri/npm/src/app/transport/transport-error.js +14 -0
- package/esm/keri/npm/src/app/witness/http-endpoints.js +185 -0
- package/esm/keri/npm/src/app/witness/ingress.js +148 -0
- package/esm/keri/npm/src/app/witness/receipt-client.js +248 -0
- package/esm/keri/npm/src/app/witness/receipt-messages.js +29 -0
- package/esm/keri/npm/src/app/witness/receipting.js +323 -0
- package/esm/keri/npm/src/app/witness/registration.js +50 -0
- package/esm/keri/npm/src/cli/common/bootstrap.js +12 -0
- package/esm/keri/npm/src/{app/cli → cli}/common/context.js +47 -9
- package/esm/keri/npm/src/{app/cli → cli}/common/existing.js +9 -29
- package/esm/keri/npm/src/cli/common/parsing.js +279 -0
- package/esm/keri/npm/src/cli/common/passcode.js +66 -0
- package/esm/keri/npm/src/cli/common/tel-completion.js +24 -0
- package/esm/keri/npm/src/{app/cli → cli}/common/witness-auth.js +2 -2
- package/esm/keri/npm/src/cli/credentials/ipex.js +702 -0
- package/esm/keri/npm/src/cli/credentials/vc.js +399 -0
- package/esm/keri/npm/src/{app/cli → cli/endpoints}/did.js +71 -53
- package/esm/keri/npm/src/{app/cli → cli/endpoints}/ends.js +34 -31
- package/esm/keri/npm/src/{app/cli → cli/endpoints}/loc.js +22 -20
- package/esm/keri/npm/src/cli/endpoints/oobi-clean.js +134 -0
- package/esm/keri/npm/src/{app/cli → cli/endpoints}/oobi.js +37 -36
- package/esm/keri/npm/src/{app/cli → cli/identity}/aid.js +8 -7
- package/esm/keri/npm/src/cli/identity/challenge.js +181 -0
- package/esm/keri/npm/src/{app/cli → cli/identity}/delegate.js +88 -73
- package/esm/keri/npm/src/{app/cli → cli/identity}/export.js +9 -8
- package/esm/keri/npm/src/cli/identity/incept.js +181 -0
- package/esm/keri/npm/src/cli/identity/init.js +153 -0
- package/esm/keri/npm/src/cli/identity/interact.js +84 -0
- package/esm/keri/npm/src/{app/cli → cli/identity}/list.js +7 -6
- package/esm/keri/npm/src/cli/identity/rotate.js +172 -0
- package/esm/keri/npm/src/cli/index.js +38 -0
- package/esm/keri/npm/src/{app/cli → cli/messaging}/exchange.js +24 -24
- package/esm/keri/npm/src/cli/messaging/multisig.js +569 -0
- package/esm/keri/npm/src/{app/cli → cli/messaging}/notifications.js +26 -22
- package/esm/keri/npm/src/{app/cli → cli}/output.js +1 -1
- package/esm/keri/npm/src/cli/tools/annotate.js +25 -0
- package/esm/keri/npm/src/{app/cli → cli/tools}/benchmark.js +18 -9
- package/esm/keri/npm/src/{app/cli → cli/tools}/db-dump.js +14 -27
- package/esm/keri/npm/src/{app/cli → cli/tools}/saidify.js +3 -2
- package/esm/keri/npm/src/{app/cli → cli/tools}/sign.js +16 -10
- package/esm/keri/npm/src/{app/cli → cli/tools}/verify.js +10 -10
- package/esm/keri/npm/src/core/attachment-countering.js +31 -1
- package/esm/keri/npm/src/core/deck.js +5 -44
- package/esm/keri/npm/src/core/dispatch.js +10 -2
- package/esm/keri/npm/src/core/errors.js +5 -10
- package/esm/keri/npm/src/core/{exchange-proofing.js → exchange/exchange-proofing.js} +32 -2
- package/esm/keri/npm/src/core/{protocol-exchanging.js → exchange/protocol-exchanging.js} +47 -4
- package/esm/keri/npm/src/core/genus-framing.js +44 -0
- package/esm/keri/npm/src/core/{eventing.js → kel/eventing.js} +209 -390
- package/esm/keri/npm/src/core/kel/kever-decisions.js +70 -0
- package/esm/keri/npm/src/core/{kever.js → kel/kever.js} +84 -167
- package/esm/keri/npm/src/core/logger.js +3 -3
- package/esm/keri/npm/src/core/{kram-policy.js → mailbox/kram-policy.js} +14 -4
- package/esm/keri/npm/src/core/{kram-pruning.js → mailbox/kram-pruning.js} +5 -15
- package/esm/keri/npm/src/core/{kram-signatures.js → mailbox/kram-signatures.js} +1 -1
- package/esm/keri/npm/src/core/mailbox/kram-staging.js +149 -0
- package/esm/keri/npm/src/core/{kram-time.js → mailbox/kram-time.js} +9 -15
- package/esm/keri/npm/src/core/mailbox/kraming.js +78 -0
- package/esm/keri/npm/src/core/protocol-eventing.js +6 -1
- package/esm/keri/npm/src/core/protocol-serialization.js +9 -34
- package/esm/keri/npm/src/core/protocol-vdr-eventing.js +10 -11
- package/esm/keri/npm/src/core/records.js +0 -19
- package/esm/keri/npm/src/core/routing.js +187 -199
- package/esm/keri/npm/src/db/baser-defaults.js +11 -0
- package/esm/keri/npm/src/db/basing.js +224 -401
- package/esm/keri/npm/src/db/core/keys.js +2 -2
- package/esm/keri/npm/src/db/core/lmdber.js +123 -149
- package/esm/keri/npm/src/db/core/path-manager.js +2 -4
- package/esm/keri/npm/src/db/escrowing.js +82 -200
- package/esm/keri/npm/src/db/exchange/exchange-nests.js +54 -0
- package/esm/keri/npm/src/db/exchange/exchange-records.js +7 -0
- package/esm/keri/npm/src/db/index.js +5 -6
- package/esm/keri/npm/src/db/keeping.js +123 -6
- package/esm/keri/npm/src/db/{kram-factors.js → mailbox/kram-factors.js} +17 -50
- package/esm/keri/npm/src/db/{mailboxing.js → mailbox/mailboxing.js} +5 -8
- package/esm/keri/npm/src/db/reger.js +48 -69
- package/esm/keri/npm/src/db/{kel-replay.js → replay/kel-replay.js} +12 -24
- package/esm/keri/npm/src/db/{tel-replay.js → replay/tel-replay.js} +38 -36
- package/esm/keri/npm/src/db/{witness-replay.js → replay/witness-replay.js} +8 -14
- package/esm/keri/npm/src/db/subing.js +2 -11
- package/esm/keri/npm/src/did/keri/resolving.js +4 -18
- package/esm/keri/npm/src/did/webs/artifacts.js +21 -24
- package/esm/keri/npm/src/did/webs/designated-aliases.js +18 -48
- package/esm/keri/npm/src/did/webs/documenting.js +8 -8
- package/esm/keri/npm/src/did/webs/resolving.js +73 -74
- package/esm/keri/npm/src/library/index.js +1 -1
- package/esm/keri/npm/src/npm/cli.js +1 -1
- package/esm/keri/npm/src/npm/index.js +1 -1
- package/esm/keri/npm/src/runtime/index.js +105 -74
- package/esm/keri/npm/src/vdr/backer-state.js +55 -0
- package/esm/keri/npm/src/vdr/credential-tsn-record.js +59 -0
- package/esm/keri/npm/src/vdr/credentialing.js +84 -109
- package/esm/keri/npm/src/vdr/eventing.js +633 -251
- package/esm/keri/npm/src/vdr/registry-tsn-record.js +55 -0
- package/esm/keri/npm/src/vdr/revoking.js +90 -0
- package/esm/keri/npm/src/vdr/tel-anchor.js +29 -0
- package/esm/keri/npm/src/vdr/tel-publication.js +178 -0
- package/esm/keri/npm/src/vdr/tsn-query.js +15 -10
- package/esm/keri/npm/src/{app/version.js → version.js} +2 -2
- package/package.json +7 -21
- package/types/_dnt.polyfills.d.ts +55 -0
- package/types/_dnt.polyfills.d.ts.map +1 -1
- package/types/acdc/chaining.d.ts +35 -0
- package/types/acdc/chaining.d.ts.map +1 -0
- package/types/acdc/dhking.d.ts +136 -0
- package/types/acdc/dhking.d.ts.map +1 -0
- package/types/acdc/messaging.d.ts.map +1 -1
- package/types/acdc/observing.d.ts +19 -15
- package/types/acdc/observing.d.ts.map +1 -1
- package/types/acdc/regbasing.d.ts +8 -9
- package/types/acdc/regbasing.d.ts.map +1 -1
- package/types/acdc/regengine.d.ts +14 -28
- package/types/acdc/regengine.d.ts.map +1 -1
- package/types/acdc/regeventing.d.ts +24 -7
- package/types/acdc/regeventing.d.ts.map +1 -1
- package/types/acdc/registering.d.ts +27 -11
- package/types/acdc/registering.d.ts.map +1 -1
- package/types/acdc/registraring.d.ts +22 -22
- package/types/acdc/registraring.d.ts.map +1 -1
- package/types/acdc/relating.d.ts +21 -0
- package/types/acdc/relating.d.ts.map +1 -0
- package/types/acdc/salting.d.ts +241 -0
- package/types/acdc/salting.d.ts.map +1 -0
- package/types/acdc/scheming.d.ts +3 -2
- package/types/acdc/scheming.d.ts.map +1 -1
- package/types/acdc/unblinding.d.ts +150 -0
- package/types/acdc/unblinding.d.ts.map +1 -0
- package/types/app/bootstrap/authenticating.d.ts +54 -0
- package/types/app/bootstrap/authenticating.d.ts.map +1 -0
- package/types/app/bootstrap/bootstrapping.d.ts +45 -0
- package/types/app/bootstrap/bootstrapping.d.ts.map +1 -0
- package/types/app/bootstrap/oobi-replies.d.ts +8 -0
- package/types/app/bootstrap/oobi-replies.d.ts.map +1 -0
- package/types/app/{oobiery.d.ts → bootstrap/oobiery.d.ts} +98 -27
- package/types/app/bootstrap/oobiery.d.ts.map +1 -0
- package/types/app/credentials/credential-importing.d.ts +29 -0
- package/types/app/credentials/credential-importing.d.ts.map +1 -0
- package/types/app/credentials/credential-proposals.d.ts +27 -0
- package/types/app/credentials/credential-proposals.d.ts.map +1 -0
- package/types/app/credentials/credential-revoking.d.ts +44 -0
- package/types/app/credentials/credential-revoking.d.ts.map +1 -0
- package/types/app/credentials/credential-workflows.d.ts +149 -0
- package/types/app/credentials/credential-workflows.d.ts.map +1 -0
- package/types/app/{schema-resolving.d.ts → credentials/schema-resolving.d.ts} +2 -2
- package/types/app/credentials/schema-resolving.d.ts.map +1 -0
- package/types/app/credentials/tel-publishing.d.ts +16 -0
- package/types/app/credentials/tel-publishing.d.ts.map +1 -0
- package/types/app/{verifying.d.ts → credentials/verifying.d.ts} +20 -9
- package/types/app/credentials/verifying.d.ts.map +1 -0
- package/types/app/delivery/forwarding.d.ts +227 -0
- package/types/app/delivery/forwarding.d.ts.map +1 -0
- package/types/app/delivery/introducing.d.ts +21 -0
- package/types/app/delivery/introducing.d.ts.map +1 -0
- package/types/app/delivery/reply-streams.d.ts +49 -0
- package/types/app/delivery/reply-streams.d.ts.map +1 -0
- package/types/app/delivery/respondant.d.ts +52 -0
- package/types/app/delivery/respondant.d.ts.map +1 -0
- package/types/app/delivery/stored-replies.d.ts +11 -0
- package/types/app/delivery/stored-replies.d.ts.map +1 -0
- package/types/app/exchanges/essr.d.ts +53 -0
- package/types/app/exchanges/essr.d.ts.map +1 -0
- package/types/app/exchanges/exchange-messaging.d.ts +73 -0
- package/types/app/exchanges/exchange-messaging.d.ts.map +1 -0
- package/types/app/exchanges/exchanging.d.ts +379 -0
- package/types/app/exchanges/exchanging.d.ts.map +1 -0
- package/types/app/{challenging.d.ts → identity/challenging.d.ts} +9 -3
- package/types/app/identity/challenging.d.ts.map +1 -0
- package/types/app/{configing.d.ts → identity/configing.d.ts} +1 -1
- package/types/app/identity/configing.d.ts.map +1 -0
- package/types/app/{delegating.d.ts → identity/delegating.d.ts} +59 -17
- package/types/app/identity/delegating.d.ts.map +1 -0
- package/types/app/identity/endpoint-roleing.d.ts +54 -0
- package/types/app/identity/endpoint-roleing.d.ts.map +1 -0
- package/types/app/{habbing.d.ts → identity/habbing.d.ts} +86 -54
- package/types/app/identity/habbing.d.ts.map +1 -0
- package/types/app/{keeping.d.ts → identity/keeping.d.ts} +19 -5
- package/types/app/identity/keeping.d.ts.map +1 -0
- package/types/app/{organizing.d.ts → identity/organizing.d.ts} +19 -4
- package/types/app/identity/organizing.d.ts.map +1 -0
- package/types/app/{ipex-building.d.ts → ipex/ipex-building.d.ts} +5 -5
- package/types/app/ipex/ipex-building.d.ts.map +1 -0
- package/types/app/{ipex-credentialing.d.ts → ipex/ipex-credentialing.d.ts} +42 -10
- package/types/app/ipex/ipex-credentialing.d.ts.map +1 -0
- package/types/app/ipex/ipex-graph.d.ts +28 -0
- package/types/app/ipex/ipex-graph.d.ts.map +1 -0
- package/types/app/ipex/ipex-grouping.d.ts +112 -0
- package/types/app/ipex/ipex-grouping.d.ts.map +1 -0
- package/types/app/ipex/ipex-node-authentication.d.ts +32 -0
- package/types/app/ipex/ipex-node-authentication.d.ts.map +1 -0
- package/types/app/ipex/ipex-v2.d.ts +71 -0
- package/types/app/ipex/ipex-v2.d.ts.map +1 -0
- package/types/app/{ipexing.d.ts → ipex/ipexing.d.ts} +21 -8
- package/types/app/ipex/ipexing.d.ts.map +1 -0
- package/types/app/mailbox/forward-handler.d.ts +68 -0
- package/types/app/mailbox/forward-handler.d.ts.map +1 -0
- package/types/app/mailbox/mailbox-director.d.ts +252 -0
- package/types/app/mailbox/mailbox-director.d.ts.map +1 -0
- package/types/app/mailbox/mailbox-poller.d.ts +149 -0
- package/types/app/mailbox/mailbox-poller.d.ts.map +1 -0
- package/types/app/mailbox/mailbox-sse.d.ts +63 -0
- package/types/app/mailbox/mailbox-sse.d.ts.map +1 -0
- package/types/app/{mailboxing.d.ts → mailbox/mailboxing.d.ts} +92 -43
- package/types/app/mailbox/mailboxing.d.ts.map +1 -0
- package/types/app/mailbox/topic-routing.d.ts +18 -0
- package/types/app/mailbox/topic-routing.d.ts.map +1 -0
- package/types/app/multisig/group-members.d.ts +60 -0
- package/types/app/multisig/group-members.d.ts.map +1 -0
- package/types/app/multisig/grouping.d.ts +317 -0
- package/types/app/multisig/grouping.d.ts.map +1 -0
- package/types/app/multisig/multisig-messaging.d.ts +97 -0
- package/types/app/multisig/multisig-messaging.d.ts.map +1 -0
- package/types/app/multisig/multisig-workflows.d.ts +85 -0
- package/types/app/multisig/multisig-workflows.d.ts.map +1 -0
- package/types/app/{notifying.d.ts → notifications/notifying.d.ts} +5 -6
- package/types/app/notifications/notifying.d.ts.map +1 -0
- package/types/app/notifications/signaling.d.ts +68 -0
- package/types/app/notifications/signaling.d.ts.map +1 -0
- package/types/app/protocol/parsering.d.ts +128 -0
- package/types/app/protocol/parsering.d.ts.map +1 -0
- package/types/app/{protocol-host-policy.d.ts → protocol/protocol-host-policy.d.ts} +1 -10
- package/types/app/protocol/protocol-host-policy.d.ts.map +1 -0
- package/types/app/protocol/protocol-processing.d.ts +140 -0
- package/types/app/protocol/protocol-processing.d.ts.map +1 -0
- package/types/app/protocol/reactor.d.ts +43 -0
- package/types/app/protocol/reactor.d.ts.map +1 -0
- package/types/app/queries/query-replies.d.ts +78 -0
- package/types/app/queries/query-replies.d.ts.map +1 -0
- package/types/app/queries/querying.d.ts +155 -0
- package/types/app/queries/querying.d.ts.map +1 -0
- package/types/app/queries/witness-inquisitor.d.ts +150 -0
- package/types/app/queries/witness-inquisitor.d.ts.map +1 -0
- package/types/app/runtime/abortable.d.ts +39 -0
- package/types/app/runtime/abortable.d.ts.map +1 -0
- package/types/app/runtime/agent-runtime.d.ts +348 -0
- package/types/app/runtime/agent-runtime.d.ts.map +1 -0
- package/types/app/runtime/cue-runtime.d.ts +33 -0
- package/types/app/runtime/cue-runtime.d.ts.map +1 -0
- package/types/app/runtime/runtime-clock.d.ts +28 -0
- package/types/app/runtime/runtime-clock.d.ts.map +1 -0
- package/types/app/runtime/runtime-turn.d.ts.map +1 -0
- package/types/app/transport/byte-source.d.ts +41 -0
- package/types/app/transport/byte-source.d.ts.map +1 -0
- package/types/app/transport/cesr-egress.d.ts +117 -0
- package/types/app/transport/cesr-egress.d.ts.map +1 -0
- package/types/app/{cesr-http.d.ts → transport/cesr-http.d.ts} +9 -33
- package/types/app/transport/cesr-http.d.ts.map +1 -0
- package/types/app/transport/http-client.d.ts +99 -0
- package/types/app/transport/http-client.d.ts.map +1 -0
- package/types/app/transport/http-messenger.d.ts +37 -0
- package/types/app/transport/http-messenger.d.ts.map +1 -0
- package/types/app/transport/http-stream-messenger.d.ts +30 -0
- package/types/app/transport/http-stream-messenger.d.ts.map +1 -0
- package/types/app/transport/httping.d.ts +19 -0
- package/types/app/transport/httping.d.ts.map +1 -0
- package/types/app/transport/message-source.d.ts +22 -0
- package/types/app/transport/message-source.d.ts.map +1 -0
- package/types/app/transport/messengering.d.ts +41 -0
- package/types/app/transport/messengering.d.ts.map +1 -0
- package/types/app/{socket-source.d.ts → transport/socket-source.d.ts} +10 -3
- package/types/app/transport/socket-source.d.ts.map +1 -0
- package/types/app/transport/tcp-egress.d.ts +118 -0
- package/types/app/transport/tcp-egress.d.ts.map +1 -0
- package/types/app/transport/tcp-messenger.d.ts +69 -0
- package/types/app/transport/tcp-messenger.d.ts.map +1 -0
- package/types/app/transport/tcp-stream-messenger.d.ts +25 -0
- package/types/app/transport/tcp-stream-messenger.d.ts.map +1 -0
- package/types/app/transport/transport-error.d.ts +12 -0
- package/types/app/transport/transport-error.d.ts.map +1 -0
- package/types/app/witness/http-endpoints.d.ts +77 -0
- package/types/app/witness/http-endpoints.d.ts.map +1 -0
- package/types/app/witness/ingress.d.ts +65 -0
- package/types/app/witness/ingress.d.ts.map +1 -0
- package/types/app/witness/receipt-client.d.ts +82 -0
- package/types/app/witness/receipt-client.d.ts.map +1 -0
- package/types/app/witness/receipt-messages.d.ts +21 -0
- package/types/app/witness/receipt-messages.d.ts.map +1 -0
- package/types/app/witness/receipting.d.ts +117 -0
- package/types/app/witness/receipting.d.ts.map +1 -0
- package/types/app/witness/registration.d.ts +27 -0
- package/types/app/witness/registration.d.ts.map +1 -0
- package/types/cli/common/bootstrap.d.ts +5 -0
- package/types/cli/common/bootstrap.d.ts.map +1 -0
- package/types/{app/cli → cli}/common/context.d.ts +10 -9
- package/types/cli/common/context.d.ts.map +1 -0
- package/types/{app/cli → cli}/common/existing.d.ts +2 -8
- package/types/cli/common/existing.d.ts.map +1 -0
- package/types/{app/cli → cli}/common/parsing.d.ts +26 -15
- package/types/cli/common/parsing.d.ts.map +1 -0
- package/types/cli/common/passcode.d.ts +9 -0
- package/types/cli/common/passcode.d.ts.map +1 -0
- package/types/cli/common/rendering.d.ts.map +1 -0
- package/types/cli/common/tel-completion.d.ts +8 -0
- package/types/cli/common/tel-completion.d.ts.map +1 -0
- package/types/{app/cli → cli}/common/witness-auth.d.ts +1 -1
- package/types/cli/common/witness-auth.d.ts.map +1 -0
- package/types/cli/credentials/ipex.d.ts +110 -0
- package/types/cli/credentials/ipex.d.ts.map +1 -0
- package/types/cli/credentials/vc.d.ts +42 -0
- package/types/cli/credentials/vc.d.ts.map +1 -0
- package/types/{app/cli → cli/endpoints}/did.d.ts +5 -1
- package/types/cli/endpoints/did.d.ts.map +1 -0
- package/types/{app/cli → cli/endpoints}/ends.d.ts +9 -1
- package/types/cli/endpoints/ends.d.ts.map +1 -0
- package/types/cli/endpoints/loc.d.ts.map +1 -0
- package/types/cli/endpoints/oobi-clean.d.ts +8 -0
- package/types/cli/endpoints/oobi-clean.d.ts.map +1 -0
- package/types/{app/cli → cli/endpoints}/oobi.d.ts +3 -1
- package/types/cli/endpoints/oobi.d.ts.map +1 -0
- package/types/cli/identity/aid.d.ts.map +1 -0
- package/types/{app/cli → cli/identity}/challenge.d.ts +5 -1
- package/types/cli/identity/challenge.d.ts.map +1 -0
- package/types/cli/identity/delegate.d.ts +4 -0
- package/types/cli/identity/delegate.d.ts.map +1 -0
- package/types/cli/identity/export.d.ts.map +1 -0
- package/types/{app/cli → cli/identity}/incept.d.ts +2 -0
- package/types/cli/identity/incept.d.ts.map +1 -0
- package/types/{app/cli → cli/identity}/init.d.ts +2 -0
- package/types/cli/identity/init.d.ts.map +1 -0
- package/types/{app/cli → cli/identity}/interact.d.ts +2 -0
- package/types/cli/identity/interact.d.ts.map +1 -0
- package/types/cli/identity/list.d.ts.map +1 -0
- package/types/{app/cli → cli/identity}/rotate.d.ts +9 -2
- package/types/cli/identity/rotate.d.ts.map +1 -0
- package/types/cli/index.d.ts +39 -0
- package/types/cli/index.d.ts.map +1 -0
- package/types/{app/cli → cli/messaging}/exchange.d.ts +3 -1
- package/types/cli/messaging/exchange.d.ts.map +1 -0
- package/types/cli/messaging/multisig.d.ts +29 -0
- package/types/cli/messaging/multisig.d.ts.map +1 -0
- package/types/cli/messaging/notifications.d.ts.map +1 -0
- package/types/cli/output.d.ts.map +1 -0
- package/types/cli/tools/annotate-color.d.ts.map +1 -0
- package/types/cli/tools/annotate.d.ts.map +1 -0
- package/types/cli/tools/benchmark.d.ts.map +1 -0
- package/types/{app/cli → cli/tools}/db-dump.d.ts +0 -2
- package/types/cli/tools/db-dump.d.ts.map +1 -0
- package/types/cli/tools/saidify.d.ts.map +1 -0
- package/types/{app/cli → cli/tools}/sign.d.ts +2 -0
- package/types/cli/tools/sign.d.ts.map +1 -0
- package/types/cli/tools/verify.d.ts.map +1 -0
- package/types/core/attachment-countering.d.ts +10 -1
- package/types/core/attachment-countering.d.ts.map +1 -1
- package/types/core/cues.d.ts +146 -57
- package/types/core/cues.d.ts.map +1 -1
- package/types/core/deck.d.ts +2 -12
- package/types/core/deck.d.ts.map +1 -1
- package/types/core/dispatch.d.ts +7 -3
- package/types/core/dispatch.d.ts.map +1 -1
- package/types/core/errors.d.ts +4 -4
- package/types/core/errors.d.ts.map +1 -1
- package/types/core/{exchange-proofing.d.ts → exchange/exchange-proofing.d.ts} +9 -2
- package/types/core/exchange/exchange-proofing.d.ts.map +1 -0
- package/types/core/{protocol-exchanging.d.ts → exchange/protocol-exchanging.d.ts} +18 -2
- package/types/core/exchange/protocol-exchanging.d.ts.map +1 -0
- package/types/core/genus-framing.d.ts +12 -0
- package/types/core/genus-framing.d.ts.map +1 -0
- package/types/core/{eventing.d.ts → kel/eventing.d.ts} +37 -48
- package/types/core/kel/eventing.d.ts.map +1 -0
- package/types/core/{kever-decisions.d.ts → kel/kever-decisions.d.ts} +36 -22
- package/types/core/kel/kever-decisions.d.ts.map +1 -0
- package/types/core/{kever.d.ts → kel/kever.d.ts} +13 -47
- package/types/core/kel/kever.d.ts.map +1 -0
- package/types/core/kel/witnesses.d.ts.map +1 -0
- package/types/core/logger.d.ts +1 -1
- package/types/core/logger.d.ts.map +1 -1
- package/types/core/{kram-auth.d.ts → mailbox/kram-auth.d.ts} +2 -2
- package/types/core/mailbox/kram-auth.d.ts.map +1 -0
- package/types/core/{kram-policy.d.ts → mailbox/kram-policy.d.ts} +2 -2
- package/types/core/mailbox/kram-policy.d.ts.map +1 -0
- package/types/core/{kram-pruning.d.ts → mailbox/kram-pruning.d.ts} +3 -3
- package/types/core/{kram-pruning.d.ts.map → mailbox/kram-pruning.d.ts.map} +1 -1
- package/types/core/{kram-signatures.d.ts → mailbox/kram-signatures.d.ts} +3 -3
- package/types/core/mailbox/kram-signatures.d.ts.map +1 -0
- package/types/core/mailbox/kram-staging.d.ts +30 -0
- package/types/core/mailbox/kram-staging.d.ts.map +1 -0
- package/types/core/{kram-time.d.ts → mailbox/kram-time.d.ts} +5 -11
- package/types/core/mailbox/kram-time.d.ts.map +1 -0
- package/types/core/mailbox/kraming.d.ts +42 -0
- package/types/core/mailbox/kraming.d.ts.map +1 -0
- package/types/core/mailbox/mailbox-topics.d.ts.map +1 -0
- package/types/core/protocol-eventing.d.ts +5 -0
- package/types/core/protocol-eventing.d.ts.map +1 -1
- package/types/core/protocol-serialization.d.ts +1 -1
- package/types/core/protocol-serialization.d.ts.map +1 -1
- package/types/core/protocol-vdr-eventing.d.ts +7 -5
- package/types/core/protocol-vdr-eventing.d.ts.map +1 -1
- package/types/core/records.d.ts +15 -50
- package/types/core/records.d.ts.map +1 -1
- package/types/core/routing.d.ts +76 -46
- package/types/core/routing.d.ts.map +1 -1
- package/types/db/baser-defaults.d.ts +5 -0
- package/types/db/baser-defaults.d.ts.map +1 -0
- package/types/db/basing.d.ts +70 -75
- package/types/db/basing.d.ts.map +1 -1
- package/types/db/core/keys.d.ts.map +1 -1
- package/types/db/core/lmdber.d.ts +21 -23
- package/types/db/core/lmdber.d.ts.map +1 -1
- package/types/db/core/path-manager.d.ts.map +1 -1
- package/types/db/escrowing.d.ts +12 -49
- package/types/db/escrowing.d.ts.map +1 -1
- package/types/db/exchange/exchange-nests.d.ts +12 -0
- package/types/db/exchange/exchange-nests.d.ts.map +1 -0
- package/types/db/exchange/exchange-records.d.ts +38 -0
- package/types/db/exchange/exchange-records.d.ts.map +1 -0
- package/types/db/index.d.ts +5 -6
- package/types/db/index.d.ts.map +1 -1
- package/types/db/keeping.d.ts +19 -1
- package/types/db/keeping.d.ts.map +1 -1
- package/types/db/koming.d.ts +1 -1
- package/types/db/koming.d.ts.map +1 -1
- package/types/db/{kram-factors.d.ts → mailbox/kram-factors.d.ts} +3 -5
- package/types/db/mailbox/kram-factors.d.ts.map +1 -0
- package/types/db/{mailboxing.d.ts → mailbox/mailboxing.d.ts} +3 -4
- package/types/db/mailbox/mailboxing.d.ts.map +1 -0
- package/types/db/reger.d.ts +10 -12
- package/types/db/reger.d.ts.map +1 -1
- package/types/db/{kel-replay.d.ts → replay/kel-replay.d.ts} +2 -6
- package/types/db/replay/kel-replay.d.ts.map +1 -0
- package/types/db/{tel-replay.d.ts → replay/tel-replay.d.ts} +13 -8
- package/types/db/replay/tel-replay.d.ts.map +1 -0
- package/types/db/{witness-replay.d.ts → replay/witness-replay.d.ts} +2 -3
- package/types/db/replay/witness-replay.d.ts.map +1 -0
- package/types/db/subing.d.ts +1 -5
- package/types/db/subing.d.ts.map +1 -1
- package/types/did/keri/resolving.d.ts +5 -10
- package/types/did/keri/resolving.d.ts.map +1 -1
- package/types/did/webs/artifacts.d.ts +5 -5
- package/types/did/webs/artifacts.d.ts.map +1 -1
- package/types/did/webs/designated-aliases.d.ts +6 -5
- package/types/did/webs/designated-aliases.d.ts.map +1 -1
- package/types/did/webs/documenting.d.ts +6 -5
- package/types/did/webs/documenting.d.ts.map +1 -1
- package/types/did/webs/resolving.d.ts +13 -3
- package/types/did/webs/resolving.d.ts.map +1 -1
- package/types/library/index.d.ts +1 -1
- package/types/library/index.d.ts.map +1 -1
- package/types/npm/cli.d.ts +1 -1
- package/types/npm/cli.d.ts.map +1 -1
- package/types/npm/index.d.ts +1 -1
- package/types/npm/index.d.ts.map +1 -1
- package/types/runtime/index.d.ts +109 -76
- package/types/runtime/index.d.ts.map +1 -1
- package/types/vdr/backer-state.d.ts +22 -0
- package/types/vdr/backer-state.d.ts.map +1 -0
- package/types/vdr/credential-tsn-record.d.ts +13 -0
- package/types/vdr/credential-tsn-record.d.ts.map +1 -0
- package/types/vdr/credentialing.d.ts +16 -27
- package/types/vdr/credentialing.d.ts.map +1 -1
- package/types/vdr/eventing.d.ts +66 -23
- package/types/vdr/eventing.d.ts.map +1 -1
- package/types/vdr/registry-tsn-record.d.ts +6 -0
- package/types/vdr/registry-tsn-record.d.ts.map +1 -0
- package/types/vdr/revoking.d.ts +18 -0
- package/types/vdr/revoking.d.ts.map +1 -0
- package/types/vdr/tel-anchor.d.ts +10 -0
- package/types/vdr/tel-anchor.d.ts.map +1 -0
- package/types/vdr/tel-publication.d.ts +49 -0
- package/types/vdr/tel-publication.d.ts.map +1 -0
- package/types/vdr/tsn-query.d.ts +9 -4
- package/types/vdr/tsn-query.d.ts.map +1 -1
- package/types/{app/version.d.ts → version.d.ts} +2 -2
- package/types/version.d.ts.map +1 -0
- package/esm/keri/npm/src/app/abortable.js +0 -27
- package/esm/keri/npm/src/app/agent-runtime.js +0 -638
- package/esm/keri/npm/src/app/cesr-egress.js +0 -308
- package/esm/keri/npm/src/app/cesr-output.js +0 -12
- package/esm/keri/npm/src/app/cli/annotate.js +0 -24
- package/esm/keri/npm/src/app/cli/challenge.js +0 -168
- package/esm/keri/npm/src/app/cli/common/displaying.js +0 -43
- package/esm/keri/npm/src/app/cli/common/parsing.js +0 -215
- package/esm/keri/npm/src/app/cli/incept.js +0 -187
- package/esm/keri/npm/src/app/cli/index.js +0 -36
- package/esm/keri/npm/src/app/cli/init.js +0 -155
- package/esm/keri/npm/src/app/cli/interact.js +0 -72
- package/esm/keri/npm/src/app/cli/ipex.js +0 -453
- package/esm/keri/npm/src/app/cli/multisig.js +0 -474
- package/esm/keri/npm/src/app/cli/query.js +0 -143
- package/esm/keri/npm/src/app/cli/rotate.js +0 -171
- package/esm/keri/npm/src/app/cli/vc.js +0 -284
- package/esm/keri/npm/src/app/cli/verifier.js +0 -96
- package/esm/keri/npm/src/app/credential-workflows.js +0 -431
- package/esm/keri/npm/src/app/cue-delivery.js +0 -171
- package/esm/keri/npm/src/app/cue-preparation.js +0 -124
- package/esm/keri/npm/src/app/cue-route.js +0 -64
- package/esm/keri/npm/src/app/cue-runtime.js +0 -104
- package/esm/keri/npm/src/app/direct-reply-delivery.js +0 -282
- package/esm/keri/npm/src/app/essr.js +0 -235
- package/esm/keri/npm/src/app/exchanging.js +0 -1219
- package/esm/keri/npm/src/app/forwarding.js +0 -1346
- package/esm/keri/npm/src/app/group-members.js +0 -37
- package/esm/keri/npm/src/app/grouping.js +0 -534
- package/esm/keri/npm/src/app/httping.js +0 -130
- package/esm/keri/npm/src/app/ipex-credentialing.js +0 -245
- package/esm/keri/npm/src/app/ipex-grouping.js +0 -317
- package/esm/keri/npm/src/app/ipex-v2.js +0 -542
- package/esm/keri/npm/src/app/mailbox-sse.js +0 -257
- package/esm/keri/npm/src/app/multisig-workflows.js +0 -537
- package/esm/keri/npm/src/app/oobi-replies.js +0 -194
- package/esm/keri/npm/src/app/query-replies.js +0 -181
- package/esm/keri/npm/src/app/querying.js +0 -1040
- package/esm/keri/npm/src/app/reactor.js +0 -517
- package/esm/keri/npm/src/app/reply-streams.js +0 -304
- package/esm/keri/npm/src/app/respondant.js +0 -173
- package/esm/keri/npm/src/app/runtime-deliveries.js +0 -510
- package/esm/keri/npm/src/app/runtime-services.js +0 -25
- package/esm/keri/npm/src/app/signaling.js +0 -388
- package/esm/keri/npm/src/app/stored-replies.js +0 -85
- package/esm/keri/npm/src/app/tcp-egress.js +0 -334
- package/esm/keri/npm/src/app/verifier-agent.js +0 -461
- package/esm/keri/npm/src/app/witnessing.js +0 -956
- package/esm/keri/npm/src/core/cue-admission.js +0 -419
- package/esm/keri/npm/src/core/index.js +0 -23
- package/esm/keri/npm/src/core/kever-decisions.js +0 -63
- package/esm/keri/npm/src/core/kram-handoff.js +0 -148
- package/esm/keri/npm/src/core/kram-staging.js +0 -211
- package/esm/keri/npm/src/core/kraming.js +0 -99
- package/esm/keri/npm/src/db/exchange-nests.js +0 -175
- package/esm/keri/npm/src/db/exchange-records.js +0 -7
- package/esm/keri/npm/src/db/kram-snapshots.js +0 -216
- package/esm/keri/npm/src/db/mailbox-inbox.js +0 -206
- package/esm/keri/npm/src/db/outboxing.js +0 -371
- package/esm/keri/npm/src/db/payload-archive.js +0 -402
- package/esm/keri/npm/src/db/payload-store.js +0 -416
- package/esm/keri/npm/src/db/payload-view.js +0 -23
- package/esm/keri/npm/src/db/verifier-cueing.js +0 -132
- package/esm/keri/npm/src/vdr/credential-tsn.js +0 -218
- package/esm/keri/npm/src/vdr/registry-tsn.js +0 -218
- package/types/app/abortable.d.ts +0 -11
- package/types/app/abortable.d.ts.map +0 -1
- package/types/app/agent-runtime.d.ts +0 -284
- package/types/app/agent-runtime.d.ts.map +0 -1
- package/types/app/authenticating.d.ts +0 -36
- package/types/app/authenticating.d.ts.map +0 -1
- package/types/app/byte-source.d.ts +0 -16
- package/types/app/byte-source.d.ts.map +0 -1
- package/types/app/cesr-egress.d.ts +0 -48
- package/types/app/cesr-egress.d.ts.map +0 -1
- package/types/app/cesr-http.d.ts.map +0 -1
- package/types/app/cesr-output.d.ts +0 -5
- package/types/app/cesr-output.d.ts.map +0 -1
- package/types/app/challenging.d.ts.map +0 -1
- package/types/app/cli/aid.d.ts.map +0 -1
- package/types/app/cli/annotate-color.d.ts.map +0 -1
- package/types/app/cli/annotate.d.ts.map +0 -1
- package/types/app/cli/benchmark.d.ts.map +0 -1
- package/types/app/cli/challenge.d.ts.map +0 -1
- package/types/app/cli/common/context.d.ts.map +0 -1
- package/types/app/cli/common/displaying.d.ts +0 -12
- package/types/app/cli/common/displaying.d.ts.map +0 -1
- package/types/app/cli/common/existing.d.ts.map +0 -1
- package/types/app/cli/common/parsing.d.ts.map +0 -1
- package/types/app/cli/common/rendering.d.ts.map +0 -1
- package/types/app/cli/common/witness-auth.d.ts.map +0 -1
- package/types/app/cli/db-dump.d.ts.map +0 -1
- package/types/app/cli/delegate.d.ts +0 -26
- package/types/app/cli/delegate.d.ts.map +0 -1
- package/types/app/cli/did.d.ts.map +0 -1
- package/types/app/cli/ends.d.ts.map +0 -1
- package/types/app/cli/exchange.d.ts.map +0 -1
- package/types/app/cli/export.d.ts.map +0 -1
- package/types/app/cli/incept.d.ts.map +0 -1
- package/types/app/cli/index.d.ts +0 -37
- package/types/app/cli/index.d.ts.map +0 -1
- package/types/app/cli/init.d.ts.map +0 -1
- package/types/app/cli/interact.d.ts.map +0 -1
- package/types/app/cli/ipex.d.ts +0 -20
- package/types/app/cli/ipex.d.ts.map +0 -1
- package/types/app/cli/list.d.ts.map +0 -1
- package/types/app/cli/loc.d.ts.map +0 -1
- package/types/app/cli/multisig.d.ts +0 -12
- package/types/app/cli/multisig.d.ts.map +0 -1
- package/types/app/cli/notifications.d.ts.map +0 -1
- package/types/app/cli/oobi.d.ts.map +0 -1
- package/types/app/cli/output.d.ts.map +0 -1
- package/types/app/cli/query.d.ts +0 -12
- package/types/app/cli/query.d.ts.map +0 -1
- package/types/app/cli/rotate.d.ts.map +0 -1
- package/types/app/cli/saidify.d.ts.map +0 -1
- package/types/app/cli/sign.d.ts.map +0 -1
- package/types/app/cli/vc.d.ts +0 -20
- package/types/app/cli/vc.d.ts.map +0 -1
- package/types/app/cli/verifier.d.ts +0 -3
- package/types/app/cli/verifier.d.ts.map +0 -1
- package/types/app/cli/verify.d.ts.map +0 -1
- package/types/app/configing.d.ts.map +0 -1
- package/types/app/credential-workflows.d.ts +0 -118
- package/types/app/credential-workflows.d.ts.map +0 -1
- package/types/app/cue-delivery.d.ts +0 -30
- package/types/app/cue-delivery.d.ts.map +0 -1
- package/types/app/cue-preparation.d.ts +0 -25
- package/types/app/cue-preparation.d.ts.map +0 -1
- package/types/app/cue-route.d.ts +0 -19
- package/types/app/cue-route.d.ts.map +0 -1
- package/types/app/cue-runtime.d.ts +0 -46
- package/types/app/cue-runtime.d.ts.map +0 -1
- package/types/app/delegating.d.ts.map +0 -1
- package/types/app/direct-reply-delivery.d.ts +0 -38
- package/types/app/direct-reply-delivery.d.ts.map +0 -1
- package/types/app/endpoint-roleing.d.ts +0 -41
- package/types/app/endpoint-roleing.d.ts.map +0 -1
- package/types/app/essr.d.ts +0 -72
- package/types/app/essr.d.ts.map +0 -1
- package/types/app/exchanging.d.ts +0 -245
- package/types/app/exchanging.d.ts.map +0 -1
- package/types/app/forwarding.d.ts +0 -411
- package/types/app/forwarding.d.ts.map +0 -1
- package/types/app/group-members.d.ts +0 -12
- package/types/app/group-members.d.ts.map +0 -1
- package/types/app/grouping.d.ts +0 -150
- package/types/app/grouping.d.ts.map +0 -1
- package/types/app/habbing.d.ts.map +0 -1
- package/types/app/httping.d.ts +0 -42
- package/types/app/httping.d.ts.map +0 -1
- package/types/app/ipex-building.d.ts.map +0 -1
- package/types/app/ipex-credentialing.d.ts.map +0 -1
- package/types/app/ipex-graph.d.ts +0 -30
- package/types/app/ipex-graph.d.ts.map +0 -1
- package/types/app/ipex-grouping.d.ts +0 -51
- package/types/app/ipex-grouping.d.ts.map +0 -1
- package/types/app/ipex-v2.d.ts +0 -51
- package/types/app/ipex-v2.d.ts.map +0 -1
- package/types/app/ipexing.d.ts.map +0 -1
- package/types/app/keeping.d.ts.map +0 -1
- package/types/app/mailbox-director.d.ts +0 -159
- package/types/app/mailbox-director.d.ts.map +0 -1
- package/types/app/mailbox-sse.d.ts +0 -38
- package/types/app/mailbox-sse.d.ts.map +0 -1
- package/types/app/mailboxing.d.ts.map +0 -1
- package/types/app/multisig-workflows.d.ts +0 -59
- package/types/app/multisig-workflows.d.ts.map +0 -1
- package/types/app/notifying.d.ts.map +0 -1
- package/types/app/oobi-replies.d.ts +0 -18
- package/types/app/oobi-replies.d.ts.map +0 -1
- package/types/app/oobiery.d.ts.map +0 -1
- package/types/app/organizing.d.ts.map +0 -1
- package/types/app/parsering.d.ts +0 -106
- package/types/app/parsering.d.ts.map +0 -1
- package/types/app/protocol-host-policy.d.ts.map +0 -1
- package/types/app/query-replies.d.ts +0 -45
- package/types/app/query-replies.d.ts.map +0 -1
- package/types/app/querying.d.ts +0 -294
- package/types/app/querying.d.ts.map +0 -1
- package/types/app/reactor.d.ts +0 -171
- package/types/app/reactor.d.ts.map +0 -1
- package/types/app/reply-streams.d.ts +0 -51
- package/types/app/reply-streams.d.ts.map +0 -1
- package/types/app/respondant.d.ts +0 -48
- package/types/app/respondant.d.ts.map +0 -1
- package/types/app/runtime-deliveries.d.ts +0 -67
- package/types/app/runtime-deliveries.d.ts.map +0 -1
- package/types/app/runtime-services.d.ts +0 -29
- package/types/app/runtime-services.d.ts.map +0 -1
- package/types/app/runtime-turn.d.ts.map +0 -1
- package/types/app/schema-resolving.d.ts.map +0 -1
- package/types/app/signaling.d.ts +0 -96
- package/types/app/signaling.d.ts.map +0 -1
- package/types/app/socket-source.d.ts.map +0 -1
- package/types/app/stored-replies.d.ts +0 -18
- package/types/app/stored-replies.d.ts.map +0 -1
- package/types/app/tcp-egress.d.ts +0 -87
- package/types/app/tcp-egress.d.ts.map +0 -1
- package/types/app/verifier-agent.d.ts +0 -91
- package/types/app/verifier-agent.d.ts.map +0 -1
- package/types/app/verifying.d.ts.map +0 -1
- package/types/app/version.d.ts.map +0 -1
- package/types/app/witnessing.d.ts +0 -227
- package/types/app/witnessing.d.ts.map +0 -1
- package/types/core/cue-admission.d.ts +0 -74
- package/types/core/cue-admission.d.ts.map +0 -1
- package/types/core/eventing.d.ts.map +0 -1
- package/types/core/exchange-proofing.d.ts.map +0 -1
- package/types/core/index.d.ts +0 -24
- package/types/core/index.d.ts.map +0 -1
- package/types/core/kever-decisions.d.ts.map +0 -1
- package/types/core/kever.d.ts.map +0 -1
- package/types/core/kram-auth.d.ts.map +0 -1
- package/types/core/kram-handoff.d.ts +0 -45
- package/types/core/kram-handoff.d.ts.map +0 -1
- package/types/core/kram-policy.d.ts.map +0 -1
- package/types/core/kram-signatures.d.ts.map +0 -1
- package/types/core/kram-staging.d.ts +0 -36
- package/types/core/kram-staging.d.ts.map +0 -1
- package/types/core/kram-time.d.ts.map +0 -1
- package/types/core/kraming.d.ts +0 -46
- package/types/core/kraming.d.ts.map +0 -1
- package/types/core/mailbox-topics.d.ts.map +0 -1
- package/types/core/protocol-exchanging.d.ts.map +0 -1
- package/types/core/witnesses.d.ts.map +0 -1
- package/types/db/exchange-nests.d.ts +0 -39
- package/types/db/exchange-nests.d.ts.map +0 -1
- package/types/db/exchange-records.d.ts +0 -35
- package/types/db/exchange-records.d.ts.map +0 -1
- package/types/db/kel-replay.d.ts.map +0 -1
- package/types/db/kram-factors.d.ts.map +0 -1
- package/types/db/kram-snapshots.d.ts +0 -23
- package/types/db/kram-snapshots.d.ts.map +0 -1
- package/types/db/mailbox-inbox.d.ts +0 -72
- package/types/db/mailbox-inbox.d.ts.map +0 -1
- package/types/db/mailboxing.d.ts.map +0 -1
- package/types/db/outboxing.d.ts +0 -182
- package/types/db/outboxing.d.ts.map +0 -1
- package/types/db/payload-archive.d.ts +0 -70
- package/types/db/payload-archive.d.ts.map +0 -1
- package/types/db/payload-store.d.ts +0 -40
- package/types/db/payload-store.d.ts.map +0 -1
- package/types/db/payload-view.d.ts +0 -4
- package/types/db/payload-view.d.ts.map +0 -1
- package/types/db/tel-replay.d.ts.map +0 -1
- package/types/db/verifier-cueing.d.ts +0 -46
- package/types/db/verifier-cueing.d.ts.map +0 -1
- package/types/db/witness-replay.d.ts.map +0 -1
- package/types/vdr/credential-tsn.d.ts +0 -18
- package/types/vdr/credential-tsn.d.ts.map +0 -1
- package/types/vdr/registry-tsn.d.ts +0 -23
- package/types/vdr/registry-tsn.d.ts.map +0 -1
- /package/esm/keri/npm/src/app/{schema-resolving.js → credentials/schema-resolving.js} +0 -0
- /package/esm/keri/npm/src/app/{protocol-host-policy.js → protocol/protocol-host-policy.js} +0 -0
- /package/esm/keri/npm/src/app/{runtime-turn.js → runtime/runtime-turn.js} +0 -0
- /package/esm/keri/npm/src/{app/cli → cli}/common/rendering.js +0 -0
- /package/esm/keri/npm/src/{app/cli → cli/tools}/annotate-color.js +0 -0
- /package/esm/keri/npm/src/core/{witnesses.js → kel/witnesses.js} +0 -0
- /package/esm/keri/npm/src/core/{kram-auth.js → mailbox/kram-auth.js} +0 -0
- /package/esm/keri/npm/src/core/{mailbox-topics.js → mailbox/mailbox-topics.js} +0 -0
- /package/types/app/{runtime-turn.d.ts → runtime/runtime-turn.d.ts} +0 -0
- /package/types/{app/cli → cli}/common/rendering.d.ts +0 -0
- /package/types/{app/cli → cli/endpoints}/loc.d.ts +0 -0
- /package/types/{app/cli → cli/identity}/aid.d.ts +0 -0
- /package/types/{app/cli → cli/identity}/export.d.ts +0 -0
- /package/types/{app/cli → cli/identity}/list.d.ts +0 -0
- /package/types/{app/cli → cli/messaging}/notifications.d.ts +0 -0
- /package/types/{app/cli → cli}/output.d.ts +0 -0
- /package/types/{app/cli → cli/tools}/annotate-color.d.ts +0 -0
- /package/types/{app/cli → cli/tools}/annotate.d.ts +0 -0
- /package/types/{app/cli → cli/tools}/benchmark.d.ts +0 -0
- /package/types/{app/cli → cli/tools}/saidify.d.ts +0 -0
- /package/types/{app/cli → cli/tools}/verify.d.ts +0 -0
- /package/types/core/{witnesses.d.ts → kel/witnesses.d.ts} +0 -0
- /package/types/core/{mailbox-topics.d.ts → mailbox/mailbox-topics.d.ts} +0 -0
|
@@ -0,0 +1,716 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python's local IPEX DHKE profile, carried by KERI/CESR v2. The HKDF profile
|
|
3
|
+
* itself is not a KERI standard. Consent and ephemeral keys are process-local;
|
|
4
|
+
* only completed Salt128 roots enter the encrypted Keeper.
|
|
5
|
+
*/
|
|
6
|
+
import { bytesEqual, concatBytes, Counter, Kinds, makeBlindUuid, Matter, MtrDex, parseAttachmentGroup, parseBytes, ParserError, Prefixer, Saider, Salter, SealLast, unblindBlindState, Vrsn_2_0, x25519PublicKey, x25519SharedSecret, } from "cesr-ts";
|
|
7
|
+
import { hkdf } from "@noble/hashes/hkdf";
|
|
8
|
+
import { sha256 } from "@noble/hashes/sha2";
|
|
9
|
+
import { Hab } from "../app/identity/habbing.js";
|
|
10
|
+
import { groupWitnesserSelection, isLocalGroupHab, latestGroupContribution, localGroupMember, } from "../app/multisig/group-members.js";
|
|
11
|
+
import { copyAuxiliaryQuery, envelopeFromFrame, } from "../app/protocol/parsering.js";
|
|
12
|
+
import { Deck } from "../core/deck.js";
|
|
13
|
+
import { ValidationError } from "../core/errors.js";
|
|
14
|
+
import { verifyQueryAttachments } from "../core/exchange/exchange-proofing.js";
|
|
15
|
+
import { Kever } from "../core/kel/kever.js";
|
|
16
|
+
import { query, reply } from "../core/protocol-eventing.js";
|
|
17
|
+
import { messagize } from "../core/protocol-serialization.js";
|
|
18
|
+
import { fetchStoredTsgs, unverifiedReplyDecision } from "../core/routing.js";
|
|
19
|
+
import { timestampMicros } from "../time/mod.js";
|
|
20
|
+
import { validateUpdate, verifyRegistryAnchor } from "./regeventing.js";
|
|
21
|
+
import { publicOpeningAttachment } from "./registering.js";
|
|
22
|
+
const domain = new TextEncoder().encode("KERI/ipex/dhke/X25519-HKDF-SHA256-Salt128/v1");
|
|
23
|
+
/** Parse exactly one qualified primitive; decoder failures are caller-input refusals here. */
|
|
24
|
+
function canonical(value, ctor) {
|
|
25
|
+
if (typeof value !== "string" || !value)
|
|
26
|
+
throw new ValidationError("Expected canonical CESR material");
|
|
27
|
+
try {
|
|
28
|
+
const material = new ctor({ qb64: value });
|
|
29
|
+
if (new Matter({ raw: material.raw, code: material.code }).qb64 !== value) {
|
|
30
|
+
throw new ValidationError("Noncanonical or trailing CESR material");
|
|
31
|
+
}
|
|
32
|
+
return material;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
if (error instanceof ParserError)
|
|
36
|
+
throw new ValidationError("Invalid CESR material", { cause: error });
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** Decode canonical CESR C public material; the agreement primitive checks contribution. */
|
|
41
|
+
export function decodePublicKey(value) {
|
|
42
|
+
const key = canonical(value, Matter);
|
|
43
|
+
if (key.code !== MtrDex.X25519 || key.raw.length !== 32)
|
|
44
|
+
throw new ValidationError("Expected X25519 public key");
|
|
45
|
+
return key.raw;
|
|
46
|
+
}
|
|
47
|
+
/** Generate a fresh agreement scalar, independent of every signing key. */
|
|
48
|
+
export function generateKeyPair() {
|
|
49
|
+
const privateKey = crypto.getRandomValues(new Uint8Array(32));
|
|
50
|
+
return { privateKey, publicKey: new Matter({ raw: x25519PublicKey(privateKey), code: MtrDex.X25519 }).qb64 };
|
|
51
|
+
}
|
|
52
|
+
/** Derive one Salt128; malformed context, wrong local keys and low-order peers refuse. */
|
|
53
|
+
export function deriveRoot(privateKey, context) {
|
|
54
|
+
const { role, xid, grant, registry, issuer, issuee, issuerPublicKey, issueePublicKey } = context;
|
|
55
|
+
if (!(privateKey instanceof Uint8Array) || privateKey.length !== 32 || !["issuer", "issuee"].includes(role)) {
|
|
56
|
+
throw new ValidationError("Expected role and 32-byte ephemeral private key");
|
|
57
|
+
}
|
|
58
|
+
for (const value of [xid, grant, registry])
|
|
59
|
+
canonical(value, Saider);
|
|
60
|
+
for (const value of [issuer, issuee])
|
|
61
|
+
canonical(value, Prefixer);
|
|
62
|
+
const issuerKey = decodePublicKey(issuerPublicKey), issueeKey = decodePublicKey(issueePublicKey);
|
|
63
|
+
const own = role === "issuer" ? issuerKey : issueeKey, peer = role === "issuer" ? issueeKey : issuerKey;
|
|
64
|
+
if (!bytesEqual(x25519PublicKey(privateKey), own))
|
|
65
|
+
throw new ValidationError("Local ephemeral key mismatch");
|
|
66
|
+
const shared = x25519SharedSecret(privateKey, peer);
|
|
67
|
+
if (!shared)
|
|
68
|
+
throw new ValidationError("Noncontributory X25519 public key");
|
|
69
|
+
const parts = [
|
|
70
|
+
domain,
|
|
71
|
+
...[xid, grant, registry, issuer, issuee, issuerPublicKey, issueePublicKey]
|
|
72
|
+
.map((value) => new TextEncoder().encode(value)),
|
|
73
|
+
];
|
|
74
|
+
const info = new Uint8Array(parts.reduce((size, part) => size + 4 + part.length, 0));
|
|
75
|
+
let offset = 0;
|
|
76
|
+
for (const part of parts) {
|
|
77
|
+
new DataView(info.buffer).setUint32(offset, part.length, false);
|
|
78
|
+
info.set(part, offset + 4);
|
|
79
|
+
offset += 4 + part.length;
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
return new Salter({ raw: hkdf(sha256, shared, sha256(domain), info, 16), code: MtrDex.Salt_128 });
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
shared.fill(0);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Issuer/issuee DH for an explicitly approved pending Grant. Wire
|
|
90
|
+
* intake cannot approve work. Inject as ProtocolProcessor.qvy and register on
|
|
91
|
+
* Revery's existing Router at Route. Full proofs remain owned by KRAM/Revery.
|
|
92
|
+
* A group freezes its own accepted coordinator/custodian at approval. Members
|
|
93
|
+
* contribute ordinary signatures; only the custodian generates or retains keys,
|
|
94
|
+
* after own complete query/reply intake through the same threshold owners.
|
|
95
|
+
*/
|
|
96
|
+
export class Dhke {
|
|
97
|
+
/** Bind concrete local owners; construction grants no consent and writes nothing. */
|
|
98
|
+
constructor({ hab, exc, registryStore, rvy = hab.rvy, now = Date.now }) {
|
|
99
|
+
Object.defineProperty(this, "resource", {
|
|
100
|
+
enumerable: true,
|
|
101
|
+
configurable: true,
|
|
102
|
+
writable: true,
|
|
103
|
+
value: Dhke.Route
|
|
104
|
+
});
|
|
105
|
+
Object.defineProperty(this, "outgoing", {
|
|
106
|
+
enumerable: true,
|
|
107
|
+
configurable: true,
|
|
108
|
+
writable: true,
|
|
109
|
+
value: new Deck()
|
|
110
|
+
});
|
|
111
|
+
Object.defineProperty(this, "pendingQueries", {
|
|
112
|
+
enumerable: true,
|
|
113
|
+
configurable: true,
|
|
114
|
+
writable: true,
|
|
115
|
+
value: new Map()
|
|
116
|
+
});
|
|
117
|
+
Object.defineProperty(this, "now", {
|
|
118
|
+
enumerable: true,
|
|
119
|
+
configurable: true,
|
|
120
|
+
writable: true,
|
|
121
|
+
value: void 0
|
|
122
|
+
});
|
|
123
|
+
Object.defineProperty(this, "operations", {
|
|
124
|
+
enumerable: true,
|
|
125
|
+
configurable: true,
|
|
126
|
+
writable: true,
|
|
127
|
+
value: new Map()
|
|
128
|
+
});
|
|
129
|
+
Object.defineProperty(this, "hab", {
|
|
130
|
+
enumerable: true,
|
|
131
|
+
configurable: true,
|
|
132
|
+
writable: true,
|
|
133
|
+
value: void 0
|
|
134
|
+
});
|
|
135
|
+
Object.defineProperty(this, "exc", {
|
|
136
|
+
enumerable: true,
|
|
137
|
+
configurable: true,
|
|
138
|
+
writable: true,
|
|
139
|
+
value: void 0
|
|
140
|
+
});
|
|
141
|
+
Object.defineProperty(this, "rvy", {
|
|
142
|
+
enumerable: true,
|
|
143
|
+
configurable: true,
|
|
144
|
+
writable: true,
|
|
145
|
+
value: void 0
|
|
146
|
+
});
|
|
147
|
+
Object.defineProperty(this, "registryStore", {
|
|
148
|
+
enumerable: true,
|
|
149
|
+
configurable: true,
|
|
150
|
+
writable: true,
|
|
151
|
+
value: void 0
|
|
152
|
+
});
|
|
153
|
+
Object.defineProperty(this, "group", {
|
|
154
|
+
enumerable: true,
|
|
155
|
+
configurable: true,
|
|
156
|
+
writable: true,
|
|
157
|
+
value: void 0
|
|
158
|
+
});
|
|
159
|
+
if (!(hab instanceof Hab) || hab.db !== exc.hby.db || rvy.db !== hab.db
|
|
160
|
+
|| exc.hby.habs.get(hab.pre) !== hab)
|
|
161
|
+
throw new ValidationError("DH requires a local signing habitat");
|
|
162
|
+
this.now = now;
|
|
163
|
+
this.hab = hab;
|
|
164
|
+
this.exc = exc;
|
|
165
|
+
this.rvy = rvy;
|
|
166
|
+
this.registryStore = registryStore;
|
|
167
|
+
this.group = isLocalGroupHab(exc.hby, hab);
|
|
168
|
+
if (this.group && !(localGroupMember(exc.hby, hab.pre) instanceof Hab)) {
|
|
169
|
+
throw new ValidationError("DH requires a local signing member");
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/** Select one live fresh issuance and freeze its exact bodies, parties and registry order. */
|
|
173
|
+
approve(grant, { coordinator, custodian } = {}) {
|
|
174
|
+
this.pruneQueries();
|
|
175
|
+
this.hab.mgr.requireRegistryRootAccess();
|
|
176
|
+
for (const op of this.operations.values()) {
|
|
177
|
+
if (op.grant === grant) {
|
|
178
|
+
if ((coordinator
|
|
179
|
+
&& (coordinator.sn !== op.custody?.coordinator.sn || coordinator.said !== op.custody?.coordinator.said))
|
|
180
|
+
|| (custodian !== undefined && custodian !== op.custody?.custodian)) {
|
|
181
|
+
throw new ValidationError("DH coordinator and custodian are already frozen");
|
|
182
|
+
}
|
|
183
|
+
this.live(op);
|
|
184
|
+
return op.xid;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
const input = this.exc.retainedInput(grant, { pending: true });
|
|
188
|
+
if (!input)
|
|
189
|
+
throw new ValidationError("DH requires an authenticated pending Grant");
|
|
190
|
+
const message = input.serder, issuer = message.pre, issuee = message.sad.ri;
|
|
191
|
+
const xid = message.ilk === "xip" ? message.said : message.sad.x;
|
|
192
|
+
if (typeof xid !== "string" || typeof issuee !== "string" || issuer === issuee
|
|
193
|
+
|| ![issuer, issuee].includes(this.hab.pre))
|
|
194
|
+
throw new ValidationError("Local habitat is not a DH party");
|
|
195
|
+
if (this.operations.has(xid))
|
|
196
|
+
throw new ValidationError("Another Grant is selected for this transaction");
|
|
197
|
+
const context = this.exc.pendingGrant(grant, { xid, sender: issuer, recipient: issuee });
|
|
198
|
+
if (!context)
|
|
199
|
+
throw new ValidationError("DH requires authenticated fresh registry scope");
|
|
200
|
+
const op = {
|
|
201
|
+
xid,
|
|
202
|
+
grant,
|
|
203
|
+
issuer,
|
|
204
|
+
issuee,
|
|
205
|
+
raw: message.raw.slice(),
|
|
206
|
+
bodies: (input.nests ?? []).map((nest) => nest.body.raw.slice()),
|
|
207
|
+
registries: [...context.registries],
|
|
208
|
+
privateKeys: new Map(),
|
|
209
|
+
publicKeys: {},
|
|
210
|
+
peer: null,
|
|
211
|
+
query: null,
|
|
212
|
+
reply: null,
|
|
213
|
+
proposal: null,
|
|
214
|
+
contribution: null,
|
|
215
|
+
custody: null,
|
|
216
|
+
completed: false,
|
|
217
|
+
abandoned: false,
|
|
218
|
+
};
|
|
219
|
+
if (this.group) {
|
|
220
|
+
if (!coordinator || !custodian) {
|
|
221
|
+
throw new ValidationError("Group DH requires its own accepted coordinator and custodian");
|
|
222
|
+
}
|
|
223
|
+
const selected = groupWitnesserSelection(this.hab.db, this.hab.pre, coordinator);
|
|
224
|
+
if (!selected)
|
|
225
|
+
throw new ValidationError("Group coordinator lacks accepted threshold evidence");
|
|
226
|
+
op.custody = {
|
|
227
|
+
coordinator: { ...coordinator },
|
|
228
|
+
custodian,
|
|
229
|
+
establishment: selected.establishment.said,
|
|
230
|
+
index: selected.index,
|
|
231
|
+
key: selected.establishment.verfers[selected.index].qb64,
|
|
232
|
+
};
|
|
233
|
+
this.custody(op);
|
|
234
|
+
}
|
|
235
|
+
else if (coordinator !== undefined || custodian !== undefined) {
|
|
236
|
+
throw new ValidationError("Individual DH has no group coordinator");
|
|
237
|
+
}
|
|
238
|
+
this.roots(op);
|
|
239
|
+
this.operations.set(xid, op);
|
|
240
|
+
this.replayQuery(xid);
|
|
241
|
+
return xid;
|
|
242
|
+
}
|
|
243
|
+
/** Return the stable issuer proposal until own threshold intake supplies the complete query. */
|
|
244
|
+
start(grant) {
|
|
245
|
+
const op = this.operation(this.approve(grant));
|
|
246
|
+
if (this.hab.pre !== op.issuer)
|
|
247
|
+
throw new ValidationError("Only the issuer starts DH");
|
|
248
|
+
this.custody(op, true);
|
|
249
|
+
this.roots(op);
|
|
250
|
+
if (!op.query && !op.proposal) {
|
|
251
|
+
this.generate(op);
|
|
252
|
+
const message = query(Dhke.Route, { x: op.xid, pk: op.publicKeys }, {
|
|
253
|
+
pre: this.hab.pre,
|
|
254
|
+
replyRoute: Dhke.Route,
|
|
255
|
+
pvrsn: Vrsn_2_0,
|
|
256
|
+
kind: Kinds.json,
|
|
257
|
+
});
|
|
258
|
+
const signed = this.hab.endorse(message, { gvrsn: Vrsn_2_0 });
|
|
259
|
+
if (this.group) {
|
|
260
|
+
op.proposal = message.raw.slice();
|
|
261
|
+
op.contribution = signed;
|
|
262
|
+
}
|
|
263
|
+
else
|
|
264
|
+
op.query = signed;
|
|
265
|
+
}
|
|
266
|
+
return (op.query ?? op.contribution).slice();
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Re-sign this issuer's started individual query for delivery now.
|
|
270
|
+
*
|
|
271
|
+
* KERIpy `Dhke.requery` (kentbull/keripy#159): a queued query can age past the
|
|
272
|
+
* issuee's KRAM timeliness window before transport begins. The renewal keeps
|
|
273
|
+
* the approved Grant, ephemeral keys and registry scope; only the query's own
|
|
274
|
+
* `dt`, SAID and signatures change, and it becomes the outstanding query. It
|
|
275
|
+
* never extends the Grant's exchange deadline. A group threshold query needs
|
|
276
|
+
* a new member proposal, so groups cannot renew here.
|
|
277
|
+
*/
|
|
278
|
+
requery(xid) {
|
|
279
|
+
const op = this.operation(xid);
|
|
280
|
+
if (this.group)
|
|
281
|
+
throw new ValidationError("one group member cannot renew a threshold DH query");
|
|
282
|
+
if (this.hab.pre !== op.issuer || !op.query)
|
|
283
|
+
throw new ValidationError("DH has no started issuer query");
|
|
284
|
+
this.live(op);
|
|
285
|
+
this.roots(op);
|
|
286
|
+
if (op.completed)
|
|
287
|
+
throw new ValidationError("DH operation has already completed");
|
|
288
|
+
const message = query(Dhke.Route, { x: op.xid, pk: op.publicKeys }, {
|
|
289
|
+
pre: this.hab.pre,
|
|
290
|
+
replyRoute: Dhke.Route,
|
|
291
|
+
pvrsn: Vrsn_2_0,
|
|
292
|
+
kind: Kinds.json,
|
|
293
|
+
});
|
|
294
|
+
op.query = this.hab.endorse(message, { gvrsn: Vrsn_2_0 });
|
|
295
|
+
return op.query.slice();
|
|
296
|
+
}
|
|
297
|
+
/** Explicitly sign one exact custodian proposal; partial proof authorizes review, never DH. */
|
|
298
|
+
contribute(xid, proposal) {
|
|
299
|
+
if (!this.group)
|
|
300
|
+
throw new ValidationError("DH contribution requires a local group member");
|
|
301
|
+
const frames = parseBytes(concatBytes(Counter.makeGVC(Vrsn_2_0), proposal));
|
|
302
|
+
if (frames.length !== 1)
|
|
303
|
+
throw new ValidationError("DH proposal must be one signed query or reply");
|
|
304
|
+
const parsed = envelopeFromFrame(frames[0]), message = parsed.serder;
|
|
305
|
+
const allowed = ["ControllerIdxSigs", "TransIdxSigGroups", "TransLastIdxSigGroups"];
|
|
306
|
+
if (!["qry", "rpy"].includes(message.ilk) || parsed.essrs?.length || parsed.nests.length
|
|
307
|
+
|| parsed.attachmentGroups.some(group => !allowed.includes(group.name.replace(/^Big/, "")))) {
|
|
308
|
+
throw new ValidationError("DH proposal must contain only ordinary group signatures");
|
|
309
|
+
}
|
|
310
|
+
const querying = message.ilk === "qry";
|
|
311
|
+
const { op, peer: publicKeys } = this.preflight(message, querying ? "q" : "a", querying ? "issuer" : "issuee", true);
|
|
312
|
+
if (op.xid !== xid || (querying && message.sad.rr !== Dhke.Route)) {
|
|
313
|
+
throw new ValidationError("DH proposal differs from the approved transaction");
|
|
314
|
+
}
|
|
315
|
+
if (!querying && !op.peer)
|
|
316
|
+
throw new ValidationError("Group reply requires its authenticated peer query");
|
|
317
|
+
if (op.proposal && !bytesEqual(op.proposal, message.raw)) {
|
|
318
|
+
throw new ValidationError("DH proposal body is already frozen");
|
|
319
|
+
}
|
|
320
|
+
const kever = this.hab.kever;
|
|
321
|
+
const signatures = [
|
|
322
|
+
...parsed.sigers,
|
|
323
|
+
...parsed.ssgs.filter(group => group.pre === this.hab.pre).flatMap(group => group.sigers),
|
|
324
|
+
...parsed.tsgs.filter(group => group.pre === this.hab.pre && group.sn === BigInt(kever.lastEst.s)
|
|
325
|
+
&& group.said === kever.lastEst.d).flatMap(group => group.sigers),
|
|
326
|
+
];
|
|
327
|
+
const { indices } = Kever.verifyIndexedSignatures(message.raw, signatures, kever.verfers);
|
|
328
|
+
const contribution = latestGroupContribution(this.hab.db, op.custody.custodian, kever.verfers);
|
|
329
|
+
if (!contribution || !indices.includes(contribution.index)) {
|
|
330
|
+
throw new ValidationError("DH proposal lacks the frozen custodian signature");
|
|
331
|
+
}
|
|
332
|
+
const signed = this.hab.endorse(message, { gvrsn: Vrsn_2_0 });
|
|
333
|
+
op.proposal = message.raw.slice();
|
|
334
|
+
op.publicKeys = { ...publicKeys };
|
|
335
|
+
op.contribution = signed;
|
|
336
|
+
return signed.slice();
|
|
337
|
+
}
|
|
338
|
+
/** Independently authenticate the full issuer threshold, even when KRAM is disabled. */
|
|
339
|
+
processQuery(envelope) {
|
|
340
|
+
this.pruneQueries();
|
|
341
|
+
try {
|
|
342
|
+
const { serder } = envelope;
|
|
343
|
+
if (serder.ilk !== "qry" || serder.sad.rr !== Dhke.Route)
|
|
344
|
+
throw new ValidationError("Invalid DH query");
|
|
345
|
+
const own = this.group && serder.pre === this.hab.pre;
|
|
346
|
+
const xid = serder.sad?.q?.x;
|
|
347
|
+
if (!own && typeof xid === "string" && !this.operations.has(xid)) {
|
|
348
|
+
this.retainQuery(envelope);
|
|
349
|
+
return { kind: "accept" };
|
|
350
|
+
}
|
|
351
|
+
const { op, peer } = this.preflight(serder, "q", own ? "issuer" : "issuee", own);
|
|
352
|
+
if (own && (!op.proposal || !bytesEqual(op.proposal, serder.raw))) {
|
|
353
|
+
throw new ValidationError("Own DH query lacks exact local proposal approval");
|
|
354
|
+
}
|
|
355
|
+
if (!verifyQueryAttachments(this.hab.db, envelope)) {
|
|
356
|
+
return { kind: "drop", reason: "missingAuthentication" };
|
|
357
|
+
}
|
|
358
|
+
if (own) {
|
|
359
|
+
if (!op.query) {
|
|
360
|
+
const tsgs = envelope.tsgs.filter(group => group.pre === this.hab.pre);
|
|
361
|
+
const lasts = envelope.ssgs.filter(group => group.pre === this.hab.pre);
|
|
362
|
+
op.query = messagize(serder, {
|
|
363
|
+
tsgs,
|
|
364
|
+
sigers: tsgs.length ? [] : lasts.length ? lasts.flatMap(group => group.sigers) : envelope.sigers,
|
|
365
|
+
seal: !tsgs.length && lasts.length ? SealLast.fromTuple([lasts[0].prefixer]) : undefined,
|
|
366
|
+
gvrsn: Vrsn_2_0,
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
if (this.custody(op))
|
|
370
|
+
this.outgoing.push({ kin: "query", dest: op.issuee, msg: op.query.slice() });
|
|
371
|
+
return { kind: "accept" };
|
|
372
|
+
}
|
|
373
|
+
if (this.group && !this.custody(op)) {
|
|
374
|
+
op.peer = { ...peer };
|
|
375
|
+
return { kind: "accept" };
|
|
376
|
+
}
|
|
377
|
+
if (!op.reply) {
|
|
378
|
+
if (!op.proposal) {
|
|
379
|
+
this.generate(op);
|
|
380
|
+
const roots = this.derive(op, peer, "issuee");
|
|
381
|
+
const message = reply(Dhke.Route, { x: op.xid, pk: op.publicKeys }, {
|
|
382
|
+
pre: this.hab.pre,
|
|
383
|
+
pvrsn: Vrsn_2_0,
|
|
384
|
+
kind: Kinds.json,
|
|
385
|
+
});
|
|
386
|
+
const signed = this.hab.endorse(message, { gvrsn: Vrsn_2_0 });
|
|
387
|
+
if (this.group) {
|
|
388
|
+
op.proposal = message.raw.slice();
|
|
389
|
+
op.contribution = signed;
|
|
390
|
+
op.peer = { ...peer };
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
this.retain(op, peer, roots);
|
|
394
|
+
op.reply = signed;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
if (this.group) {
|
|
398
|
+
this.outgoing.push({ kin: "sign", dest: this.hab.pre, msg: op.contribution.slice() });
|
|
399
|
+
return { kind: "accept" };
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
this.outgoing.push({ kin: "reply", dest: op.issuer, msg: op.reply.slice() });
|
|
403
|
+
return { kind: "accept" };
|
|
404
|
+
}
|
|
405
|
+
catch (error) {
|
|
406
|
+
if (error instanceof ValidationError)
|
|
407
|
+
return { kind: "drop", reason: "invalidQuery" };
|
|
408
|
+
throw error;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
/** Revery decides reply threshold acceptance before any issuer derivation or retention. */
|
|
412
|
+
processReply({ serder, diger, route, cigars = [], tsgs = [] }) {
|
|
413
|
+
try {
|
|
414
|
+
if (serder.ilk !== "rpy" || route !== Dhke.Route)
|
|
415
|
+
throw new ValidationError("Invalid DH reply");
|
|
416
|
+
const own = this.group && serder.pre === this.hab.pre;
|
|
417
|
+
const { op, peer } = this.preflight(serder, "a", own ? "issuee" : "issuer", own);
|
|
418
|
+
if (own && (!op.proposal || !bytesEqual(op.proposal, serder.raw) || !op.peer)) {
|
|
419
|
+
throw new ValidationError("Own DH reply lacks exact local proposal approval");
|
|
420
|
+
}
|
|
421
|
+
if (!own && !op.query)
|
|
422
|
+
throw new ValidationError("DH reply has no outstanding query");
|
|
423
|
+
const decision = this.rvy.acceptReply({ serder, saider: diger, route, aid: op.issuee, cigars, tsgs });
|
|
424
|
+
if (decision.kind !== "accept")
|
|
425
|
+
return decision;
|
|
426
|
+
if (own) {
|
|
427
|
+
if (this.custody(op) && !op.completed)
|
|
428
|
+
this.retain(op, op.peer, this.derive(op, op.peer, "issuee"));
|
|
429
|
+
if (!op.reply) {
|
|
430
|
+
op.reply = messagize(serder, {
|
|
431
|
+
tsgs: fetchStoredTsgs(this.hab.db, diger.qb64).filter(group => group.pre === this.hab.pre),
|
|
432
|
+
gvrsn: Vrsn_2_0,
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
if (this.custody(op))
|
|
436
|
+
this.outgoing.push({ kin: "reply", dest: op.issuer, msg: op.reply.slice() });
|
|
437
|
+
}
|
|
438
|
+
else if (this.custody(op) && !op.completed)
|
|
439
|
+
this.retain(op, peer, this.derive(op, peer, "issuer"));
|
|
440
|
+
return decision;
|
|
441
|
+
}
|
|
442
|
+
catch (error) {
|
|
443
|
+
if (error instanceof ValidationError)
|
|
444
|
+
return unverifiedReplyDecision(error.message);
|
|
445
|
+
throw error;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
/** Completion remains inspectable after BUP, while the same original Grant is live. */
|
|
449
|
+
complete(xid) {
|
|
450
|
+
const op = this.operation(xid);
|
|
451
|
+
this.pending(op);
|
|
452
|
+
this.roots(op);
|
|
453
|
+
return op.completed;
|
|
454
|
+
}
|
|
455
|
+
/** Recipient members may defer reply contribution until the issuer query independently authenticates. */
|
|
456
|
+
hasPeerQuery(xid) {
|
|
457
|
+
const op = this.operation(xid);
|
|
458
|
+
this.pending(op);
|
|
459
|
+
if (this.hab.pre !== op.issuee)
|
|
460
|
+
throw new ValidationError("Peer query readiness requires the selected issuee");
|
|
461
|
+
return op.peer !== null;
|
|
462
|
+
}
|
|
463
|
+
/** Verify all current issued openings, then retry the exact Grant; this never authors Admit. */
|
|
464
|
+
*finish(xid) {
|
|
465
|
+
const op = this.operation(xid), input = this.pending(op);
|
|
466
|
+
if (!op.completed)
|
|
467
|
+
throw new ValidationError("Issuance has no completed DH operation");
|
|
468
|
+
this.roots(op);
|
|
469
|
+
const openings = [];
|
|
470
|
+
const found = new Set();
|
|
471
|
+
for (const nest of input.nests ?? []) {
|
|
472
|
+
const registry = nest.body.ked?.rd;
|
|
473
|
+
if (typeof registry !== "string" || !op.registries.includes(registry))
|
|
474
|
+
continue;
|
|
475
|
+
const head = this.registryStore.headEvent(registry);
|
|
476
|
+
if (!head)
|
|
477
|
+
throw new ValidationError("Issued registry head is unavailable");
|
|
478
|
+
const validated = validateUpdate(head, registry), anchor = this.registryStore.anchor(head.said);
|
|
479
|
+
if (validated.kind !== "valid" || !verifyRegistryAnchor(validated.event, {
|
|
480
|
+
db: this.hab.db,
|
|
481
|
+
issuer: op.issuer,
|
|
482
|
+
number: anchor?.[0],
|
|
483
|
+
diger: anchor?.[1],
|
|
484
|
+
}))
|
|
485
|
+
throw new ValidationError("Issued registry head lacks accepted anchor evidence");
|
|
486
|
+
const root = this.hab.mgr.getRegistryRoot(this.hab.pre, registry);
|
|
487
|
+
const opening = unblindBlindState({
|
|
488
|
+
said: String(head.sad.b),
|
|
489
|
+
uuid: makeBlindUuid({ salt: root.qb64, sn: validated.event.sn }),
|
|
490
|
+
acdc: nest.body.said,
|
|
491
|
+
states: ["issued"],
|
|
492
|
+
});
|
|
493
|
+
if (!opening || opening.ts.label !== "issued" || opening.td.nonce !== nest.body.said) {
|
|
494
|
+
throw new ValidationError("Current registry head does not open this credential as issued");
|
|
495
|
+
}
|
|
496
|
+
openings.push({ nest, opening });
|
|
497
|
+
found.add(registry);
|
|
498
|
+
}
|
|
499
|
+
if (found.size !== op.registries.length)
|
|
500
|
+
throw new ValidationError("Approved registry scope is absent");
|
|
501
|
+
for (const { nest, opening } of openings) {
|
|
502
|
+
nest.attachments.push(parseAttachmentGroup(publicOpeningAttachment(opening), Vrsn_2_0, "txt").group);
|
|
503
|
+
}
|
|
504
|
+
return yield* this.exc.acceptPendingGrantProof(input);
|
|
505
|
+
}
|
|
506
|
+
/** Drop local ephemeral key references and permanently refuse this operation. */
|
|
507
|
+
abandon(xid) {
|
|
508
|
+
const retained = this.pendingQueries.delete(xid);
|
|
509
|
+
if (retained && !this.operations.has(xid))
|
|
510
|
+
return;
|
|
511
|
+
const op = this.operation(xid);
|
|
512
|
+
this.clearPrivate(op);
|
|
513
|
+
op.abandoned = true;
|
|
514
|
+
}
|
|
515
|
+
/** Release all process-local approvals and retry bytes; zero owned ephemeral scalar arrays. */
|
|
516
|
+
close() {
|
|
517
|
+
for (const op of this.operations.values())
|
|
518
|
+
this.clearPrivate(op);
|
|
519
|
+
this.operations.clear();
|
|
520
|
+
this.pendingQueries.clear();
|
|
521
|
+
this.outgoing.clear();
|
|
522
|
+
}
|
|
523
|
+
/** Retain public query evidence against one exact pending Grant, without creating keys or consent. */
|
|
524
|
+
retainQuery(envelope) {
|
|
525
|
+
const query = envelope.serder, data = this.parameters(query, "q");
|
|
526
|
+
if (!verifyQueryAttachments(this.hab.db, envelope))
|
|
527
|
+
throw new ValidationError("Unauthenticated DH query");
|
|
528
|
+
const candidates = [...this.hab.db.tmsc.getTopItemIter([query.pre, data.x])]
|
|
529
|
+
.map(([key]) => this.hab.db.epse.get([key[2]]))
|
|
530
|
+
.filter(grant => grant && grant.pre === query.pre && grant.sad.ri === this.hab.pre
|
|
531
|
+
&& this.exc.pendingGrant(grant.said, { xid: data.x, sender: query.pre, recipient: this.hab.pre }));
|
|
532
|
+
if (candidates.length !== 1)
|
|
533
|
+
throw new ValidationError("DH query has no unique authenticated pending Grant");
|
|
534
|
+
const grant = candidates[0];
|
|
535
|
+
const scope = this.exc.pendingGrant(grant.said, { xid: data.x, sender: query.pre, recipient: this.hab.pre });
|
|
536
|
+
const entries = Object.entries(data.pk);
|
|
537
|
+
if (entries.length !== scope.registries.length || entries.some(([regid]) => !scope.registries.includes(regid))) {
|
|
538
|
+
throw new ValidationError("DH query differs from the authenticated registry scope");
|
|
539
|
+
}
|
|
540
|
+
for (const [, key] of entries)
|
|
541
|
+
decodePublicKey(key);
|
|
542
|
+
const expires = this.retainUntil(envelope, grant);
|
|
543
|
+
const prior = this.pendingQueries.get(data.x);
|
|
544
|
+
if (prior && !bytesEqual(prior.envelope.serder.raw, query.raw))
|
|
545
|
+
throw new ValidationError("Conflicting DH query");
|
|
546
|
+
if (!prior) {
|
|
547
|
+
this.pendingQueries.set(data.x, { envelope: copyAuxiliaryQuery(envelope), expires, grant: grant.said });
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
/** Expired evidence cannot survive another owner interaction. */
|
|
551
|
+
pruneQueries() {
|
|
552
|
+
const now = BigInt(this.now()) * 1000n;
|
|
553
|
+
for (const [xid, query] of this.pendingQueries)
|
|
554
|
+
if (now >= query.expires)
|
|
555
|
+
this.pendingQueries.delete(xid);
|
|
556
|
+
return now;
|
|
557
|
+
}
|
|
558
|
+
/** Consume the first authenticated request only after explicit approval; never renew either clock. */
|
|
559
|
+
replayQuery(xid) {
|
|
560
|
+
const pending = this.pendingQueries.get(xid);
|
|
561
|
+
this.pendingQueries.delete(xid);
|
|
562
|
+
if (pending && pending.grant === this.operations.get(xid)?.grant
|
|
563
|
+
&& BigInt(this.now()) * 1000n < pending.expires)
|
|
564
|
+
this.processQuery(pending.envelope);
|
|
565
|
+
}
|
|
566
|
+
/** Bound process-local public evidence by the original query and accepted Grant lifetimes. */
|
|
567
|
+
retainUntil(envelope, grant) {
|
|
568
|
+
const now = this.pruneQueries();
|
|
569
|
+
const cache = this.hab.db.msgc.get([envelope.serder.pre, envelope.serder.said]);
|
|
570
|
+
const messageTime = cache && timestampMicros(cache.mdt);
|
|
571
|
+
const grantTime = timestampMicros(this.exc.exchangeDeadline(grant) ?? undefined);
|
|
572
|
+
if (!cache || this.hab.db.pmkm.get([envelope.serder.pre, envelope.serder.said]) || messageTime === null
|
|
573
|
+
|| messageTime === undefined || grantTime === null
|
|
574
|
+
|| !Number.isSafeInteger(cache.d) || !Number.isSafeInteger(cache.ml)
|
|
575
|
+
|| cache.d < 0 || cache.ml < 0 || !Number.isSafeInteger(cache.d + cache.ml)) {
|
|
576
|
+
throw new ValidationError("Query has no accepted original lifetime");
|
|
577
|
+
}
|
|
578
|
+
const queryTime = messageTime + BigInt(cache.d + cache.ml) * 1000n;
|
|
579
|
+
const expires = queryTime < grantTime ? queryTime : grantTime;
|
|
580
|
+
if (now >= expires)
|
|
581
|
+
throw new ValidationError("Query or Grant has expired");
|
|
582
|
+
return expires;
|
|
583
|
+
}
|
|
584
|
+
operation(xid) {
|
|
585
|
+
const op = this.operations.get(xid);
|
|
586
|
+
if (!op)
|
|
587
|
+
throw new ValidationError("DH transaction has no local approval");
|
|
588
|
+
return op;
|
|
589
|
+
}
|
|
590
|
+
pending(op) {
|
|
591
|
+
this.hab.mgr.requireRegistryRootAccess();
|
|
592
|
+
this.custody(op);
|
|
593
|
+
const input = this.exc.retainedInput(op.grant, { pending: true });
|
|
594
|
+
if (op.abandoned || !input || !bytesEqual(input.serder.raw, op.raw)) {
|
|
595
|
+
throw new ValidationError("DH operation is unavailable, terminated or expired");
|
|
596
|
+
}
|
|
597
|
+
const nests = input.nests ?? [];
|
|
598
|
+
if (nests.length !== op.bodies.length || nests.some((nest, index) => !bytesEqual(nest.body.raw, op.bodies[index]))) {
|
|
599
|
+
throw new ValidationError("Pending disclosure differs from the approved Grant");
|
|
600
|
+
}
|
|
601
|
+
return input;
|
|
602
|
+
}
|
|
603
|
+
live(op) {
|
|
604
|
+
this.pending(op);
|
|
605
|
+
const context = this.exc.pendingGrant(op.grant, { xid: op.xid, sender: op.issuer, recipient: op.issuee });
|
|
606
|
+
if (!context || context.registries.length !== op.registries.length
|
|
607
|
+
|| context.registries.some((registry, index) => registry !== op.registries[index])) {
|
|
608
|
+
throw new ValidationError("DH requires authenticated fresh registry scope");
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
roots(op) {
|
|
612
|
+
for (const registry of op.registries) {
|
|
613
|
+
if ((this.hab.mgr.getRegistryRoot(this.hab.pre, registry) !== null) !== op.completed) {
|
|
614
|
+
throw new ValidationError("Registry root conflicts with this live DH operation");
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
/** Decode only the exact DH message contract; authorization belongs to the selected operation. */
|
|
619
|
+
parameters(serder, field) {
|
|
620
|
+
const data = serder.sad?.[field];
|
|
621
|
+
if (!serder.verify() || serder.pvrsn.major !== 2 || serder.pvrsn.minor !== 0 || serder.route !== Dhke.Route
|
|
622
|
+
|| !data || typeof data !== "object" || Array.isArray(data)
|
|
623
|
+
|| Object.keys(data).sort().join() !== "pk,x" || !("x" in data) || typeof data.x !== "string"
|
|
624
|
+
|| !("pk" in data) || !data.pk || typeof data.pk !== "object" || Array.isArray(data.pk)) {
|
|
625
|
+
throw new ValidationError("Invalid DH message shape");
|
|
626
|
+
}
|
|
627
|
+
return data;
|
|
628
|
+
}
|
|
629
|
+
preflight(serder, field, role, own = false) {
|
|
630
|
+
const data = this.parameters(serder, field);
|
|
631
|
+
const op = this.operation(data.x);
|
|
632
|
+
this.live(op);
|
|
633
|
+
if (this.hab.pre !== op[role] || serder.pre !== op[own ? role : role === "issuer" ? "issuee" : "issuer"]) {
|
|
634
|
+
throw new ValidationError("Wrong DH sender or local recipient");
|
|
635
|
+
}
|
|
636
|
+
const entries = Object.entries(data.pk), peer = {};
|
|
637
|
+
if (entries.length !== op.registries.length || entries.some(([registry]) => !op.registries.includes(registry))) {
|
|
638
|
+
throw new ValidationError("DH registry scope differs from the selected Grant");
|
|
639
|
+
}
|
|
640
|
+
for (const [registry, key] of entries) {
|
|
641
|
+
decodePublicKey(key);
|
|
642
|
+
peer[registry] = key;
|
|
643
|
+
}
|
|
644
|
+
if (!own && op.peer && op.registries.some((registry) => op.peer[registry] !== peer[registry])) {
|
|
645
|
+
throw new ValidationError("Conflicting DH public keys");
|
|
646
|
+
}
|
|
647
|
+
this.roots(op);
|
|
648
|
+
return { op, peer };
|
|
649
|
+
}
|
|
650
|
+
generate(op) {
|
|
651
|
+
this.custody(op, true);
|
|
652
|
+
if (op.privateKeys.size)
|
|
653
|
+
return;
|
|
654
|
+
for (const registry of op.registries) {
|
|
655
|
+
const { privateKey, publicKey } = generateKeyPair();
|
|
656
|
+
op.privateKeys.set(registry, privateKey);
|
|
657
|
+
op.publicKeys[registry] = publicKey;
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
derive(op, peer, role) {
|
|
661
|
+
this.custody(op, true);
|
|
662
|
+
// Complete the entire scope, including contributory checks, before any Keeper mutation.
|
|
663
|
+
return new Map(op.registries.map((registry) => [
|
|
664
|
+
registry,
|
|
665
|
+
deriveRoot(op.privateKeys.get(registry), {
|
|
666
|
+
role,
|
|
667
|
+
xid: op.xid,
|
|
668
|
+
grant: op.grant,
|
|
669
|
+
registry,
|
|
670
|
+
issuer: op.issuer,
|
|
671
|
+
issuee: op.issuee,
|
|
672
|
+
issuerPublicKey: role === "issuer" ? op.publicKeys[registry] : peer[registry],
|
|
673
|
+
issueePublicKey: role === "issuee" ? op.publicKeys[registry] : peer[registry],
|
|
674
|
+
}),
|
|
675
|
+
]));
|
|
676
|
+
}
|
|
677
|
+
retain(op, peer, roots) {
|
|
678
|
+
for (const [registry, root] of roots)
|
|
679
|
+
this.hab.mgr.putRegistryRoot(this.hab.pre, registry, root);
|
|
680
|
+
op.peer = { ...peer };
|
|
681
|
+
op.completed = true;
|
|
682
|
+
this.clearPrivate(op);
|
|
683
|
+
}
|
|
684
|
+
clearPrivate(op) {
|
|
685
|
+
for (const key of op.privateKeys.values())
|
|
686
|
+
key.fill(0);
|
|
687
|
+
op.privateKeys.clear(); // Best effort for owned arrays only; not a process-erasure guarantee.
|
|
688
|
+
}
|
|
689
|
+
/** Recheck exact frozen election evidence and current membership without choosing a replacement. */
|
|
690
|
+
custody(op, requireLead = false) {
|
|
691
|
+
if (!this.group)
|
|
692
|
+
return true;
|
|
693
|
+
const frozen = op.custody;
|
|
694
|
+
const selected = frozen && groupWitnesserSelection(this.hab.db, this.hab.pre, frozen.coordinator);
|
|
695
|
+
if (!frozen || !selected || selected.establishment.said !== frozen.establishment
|
|
696
|
+
|| !selected.indices.includes(frozen.index))
|
|
697
|
+
throw new ValidationError("Frozen group coordinator evidence is unavailable");
|
|
698
|
+
const current = this.hab.kever.verfers, member = localGroupMember(this.exc.hby, this.hab.pre);
|
|
699
|
+
const contribution = latestGroupContribution(this.hab.db, frozen.custodian, selected.establishment.verfers);
|
|
700
|
+
if (!contribution || contribution.index !== frozen.index || contribution.verfer.qb64 !== frozen.key
|
|
701
|
+
|| !latestGroupContribution(this.hab.db, frozen.custodian, current)
|
|
702
|
+
|| !latestGroupContribution(this.hab.db, member.pre, current)) {
|
|
703
|
+
throw new ValidationError("Frozen DH custodian or local member is no longer authorized");
|
|
704
|
+
}
|
|
705
|
+
const elected = member.pre === frozen.custodian;
|
|
706
|
+
if (requireLead && !elected)
|
|
707
|
+
throw new ValidationError("Only the frozen DH custodian may generate or derive keys");
|
|
708
|
+
return elected;
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
Object.defineProperty(Dhke, "Route", {
|
|
712
|
+
enumerable: true,
|
|
713
|
+
configurable: true,
|
|
714
|
+
writable: true,
|
|
715
|
+
value: "/ipex/dhke"
|
|
716
|
+
});
|