@interop/wallet-core 0.62.0 → 0.65.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 +41 -16
- package/dist/clientAnnex/credentialAnchoredGenesis.d.ts +46 -26
- package/dist/clientAnnex/credentialAnchoredGenesis.d.ts.map +1 -1
- package/dist/clientAnnex/credentialAnchoredGenesis.js +91 -39
- package/dist/clientAnnex/credentialAnchoredGenesis.js.map +1 -1
- package/dist/clientAnnex/establish.d.ts +55 -34
- package/dist/clientAnnex/establish.d.ts.map +1 -1
- package/dist/clientAnnex/establish.js +102 -56
- package/dist/clientAnnex/establish.js.map +1 -1
- package/dist/clientAnnex/forget.d.ts +16 -2
- package/dist/clientAnnex/forget.d.ts.map +1 -1
- package/dist/clientAnnex/forget.js +11 -9
- package/dist/clientAnnex/forget.js.map +1 -1
- package/dist/clientAnnex/forgetLast.d.ts +62 -18
- package/dist/clientAnnex/forgetLast.d.ts.map +1 -1
- package/dist/clientAnnex/forgetLast.js +92 -26
- package/dist/clientAnnex/forgetLast.js.map +1 -1
- package/dist/clientAnnex/gc.d.ts +3 -2
- package/dist/clientAnnex/gc.d.ts.map +1 -1
- package/dist/clientAnnex/gc.js +7 -7
- package/dist/clientAnnex/gc.js.map +1 -1
- package/dist/clientAnnex/heal.d.ts +38 -5
- package/dist/clientAnnex/heal.d.ts.map +1 -1
- package/dist/clientAnnex/heal.js +346 -236
- package/dist/clientAnnex/heal.js.map +1 -1
- package/dist/clientAnnex/index.d.ts +21 -5
- package/dist/clientAnnex/index.d.ts.map +1 -1
- package/dist/clientAnnex/index.js +24 -5
- package/dist/clientAnnex/index.js.map +1 -1
- package/dist/clientAnnex/ladder.d.ts +58 -0
- package/dist/clientAnnex/ladder.d.ts.map +1 -1
- package/dist/clientAnnex/ladder.js +222 -33
- package/dist/clientAnnex/ladder.js.map +1 -1
- package/dist/clientAnnex/ladderAnchored.d.ts +148 -22
- package/dist/clientAnnex/ladderAnchored.d.ts.map +1 -1
- package/dist/clientAnnex/ladderAnchored.js +391 -346
- package/dist/clientAnnex/ladderAnchored.js.map +1 -1
- package/dist/clientAnnex/log.d.ts +162 -43
- package/dist/clientAnnex/log.d.ts.map +1 -1
- package/dist/clientAnnex/log.js +423 -192
- package/dist/clientAnnex/log.js.map +1 -1
- package/dist/clientAnnex/mend.d.ts +12 -6
- package/dist/clientAnnex/mend.d.ts.map +1 -1
- package/dist/clientAnnex/mend.js +26 -12
- package/dist/clientAnnex/mend.js.map +1 -1
- package/dist/clientAnnex/recoveryLadderAnchored.d.ts +6 -4
- package/dist/clientAnnex/recoveryLadderAnchored.d.ts.map +1 -1
- package/dist/clientAnnex/recoveryLadderAnchored.js +56 -35
- package/dist/clientAnnex/recoveryLadderAnchored.js.map +1 -1
- package/dist/clientAnnex/spaceCapability.d.ts +123 -0
- package/dist/clientAnnex/spaceCapability.d.ts.map +1 -0
- package/dist/clientAnnex/spaceCapability.js +152 -0
- package/dist/clientAnnex/spaceCapability.js.map +1 -0
- package/dist/clientAnnex/stages.d.ts +63 -0
- package/dist/clientAnnex/stages.d.ts.map +1 -0
- package/dist/clientAnnex/stages.js +64 -0
- package/dist/clientAnnex/stages.js.map +1 -0
- package/dist/clientAnnex/zcap.d.ts +1 -1
- package/dist/clientAnnex/zcap.d.ts.map +1 -1
- package/dist/clientAnnex/zcap.js +42 -35
- package/dist/clientAnnex/zcap.js.map +1 -1
- package/dist/clients/policy.d.ts +15 -1
- package/dist/clients/policy.d.ts.map +1 -1
- package/dist/clients/policy.js +12 -6
- package/dist/clients/policy.js.map +1 -1
- package/dist/clients/revocation.d.ts +18 -10
- package/dist/clients/revocation.d.ts.map +1 -1
- package/dist/clients/revocation.js +13 -5
- package/dist/clients/revocation.js.map +1 -1
- package/dist/clients/rosterPolicy.d.ts +10 -2
- package/dist/clients/rosterPolicy.d.ts.map +1 -1
- package/dist/clients/rosterPolicy.js +41 -24
- package/dist/clients/rosterPolicy.js.map +1 -1
- package/dist/descriptors/acquire.d.ts.map +1 -1
- package/dist/descriptors/acquire.js +6 -23
- package/dist/descriptors/acquire.js.map +1 -1
- package/dist/descriptors/cipher.d.ts.map +1 -1
- package/dist/descriptors/cipher.js +5 -0
- package/dist/descriptors/cipher.js.map +1 -1
- package/dist/descriptors/errors.d.ts +43 -0
- package/dist/descriptors/errors.d.ts.map +1 -0
- package/dist/descriptors/errors.js +45 -0
- package/dist/descriptors/errors.js.map +1 -0
- package/dist/descriptors/index.d.ts +5 -0
- package/dist/descriptors/index.d.ts.map +1 -1
- package/dist/descriptors/index.js +5 -0
- package/dist/descriptors/index.js.map +1 -1
- package/dist/enrollment/enrollment.d.ts +37 -10
- package/dist/enrollment/enrollment.d.ts.map +1 -1
- package/dist/enrollment/enrollment.js +52 -15
- package/dist/enrollment/enrollment.js.map +1 -1
- package/dist/genesis/accountGenesis.d.ts +42 -11
- package/dist/genesis/accountGenesis.d.ts.map +1 -1
- package/dist/genesis/accountGenesis.js +80 -22
- package/dist/genesis/accountGenesis.js.map +1 -1
- package/dist/genesis/index.d.ts +3 -1
- package/dist/genesis/index.d.ts.map +1 -1
- package/dist/genesis/index.js +3 -1
- package/dist/genesis/index.js.map +1 -1
- package/dist/identity/agents.d.ts +17 -1
- package/dist/identity/agents.d.ts.map +1 -1
- package/dist/identity/agents.js +23 -7
- package/dist/identity/agents.js.map +1 -1
- package/dist/identity/index.d.ts +3 -1
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +3 -1
- package/dist/identity/index.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/keyring/index.d.ts +2 -1
- package/dist/keyring/index.d.ts.map +1 -1
- package/dist/keyring/index.js +2 -1
- package/dist/keyring/index.js.map +1 -1
- package/dist/keyring/record.d.ts.map +1 -1
- package/dist/keyring/record.js +3 -6
- package/dist/keyring/record.js.map +1 -1
- package/dist/keyring/unlockSpace.d.ts +14 -5
- package/dist/keyring/unlockSpace.d.ts.map +1 -1
- package/dist/keyring/unlockSpace.js +31 -36
- package/dist/keyring/unlockSpace.js.map +1 -1
- package/dist/keys/index.d.ts +10 -6
- package/dist/keys/index.d.ts.map +1 -1
- package/dist/keys/index.js +9 -5
- package/dist/keys/index.js.map +1 -1
- package/dist/keys/rosterLogStore.d.ts +12 -11
- package/dist/keys/rosterLogStore.d.ts.map +1 -1
- package/dist/keys/rosterLogStore.js +15 -13
- package/dist/keys/rosterLogStore.js.map +1 -1
- package/dist/keys/rosterStore.d.ts +3 -6
- package/dist/keys/rosterStore.d.ts.map +1 -1
- package/dist/keys/rosterStore.js +10 -9
- package/dist/keys/rosterStore.js.map +1 -1
- package/dist/keys/spaceEpochs.d.ts.map +1 -1
- package/dist/keys/spaceEpochs.js +2 -3
- package/dist/keys/spaceEpochs.js.map +1 -1
- package/dist/keys/userKeyRoster.d.ts +57 -7
- package/dist/keys/userKeyRoster.d.ts.map +1 -1
- package/dist/keys/userKeyRoster.js +222 -17
- package/dist/keys/userKeyRoster.js.map +1 -1
- package/dist/keys/userKeyRosterCascade.d.ts +7 -6
- package/dist/keys/userKeyRosterCascade.d.ts.map +1 -1
- package/dist/keys/userKeyRosterCascade.js +7 -6
- package/dist/keys/userKeyRosterCascade.js.map +1 -1
- package/dist/keys/wasLabelsStore.d.ts +9 -2
- package/dist/keys/wasLabelsStore.d.ts.map +1 -1
- package/dist/keys/wasLabelsStore.js +14 -6
- package/dist/keys/wasLabelsStore.js.map +1 -1
- package/dist/log.d.ts +7 -2
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +6 -1
- package/dist/log.js.map +1 -1
- package/dist/recovery/index.d.ts +12 -8
- package/dist/recovery/index.d.ts.map +1 -1
- package/dist/recovery/index.js +11 -7
- package/dist/recovery/index.js.map +1 -1
- package/dist/recovery/recoveryCode.d.ts +27 -7
- package/dist/recovery/recoveryCode.d.ts.map +1 -1
- package/dist/recovery/recoveryCode.js +18 -6
- package/dist/recovery/recoveryCode.js.map +1 -1
- package/dist/recovery/recoveryDelegation.d.ts.map +1 -1
- package/dist/recovery/recoveryDelegation.js +21 -34
- package/dist/recovery/recoveryDelegation.js.map +1 -1
- package/dist/recovery/recoveryWebvh.d.ts +75 -63
- package/dist/recovery/recoveryWebvh.d.ts.map +1 -1
- package/dist/recovery/recoveryWebvh.js +127 -116
- package/dist/recovery/recoveryWebvh.js.map +1 -1
- package/dist/request/classify.d.ts +32 -8
- package/dist/request/classify.d.ts.map +1 -1
- package/dist/request/classify.js +39 -14
- package/dist/request/classify.js.map +1 -1
- package/dist/request/ephemeralExchange.d.ts +1 -6
- package/dist/request/ephemeralExchange.d.ts.map +1 -1
- package/dist/request/ephemeralExchange.js.map +1 -1
- package/dist/request/onboarding.d.ts.map +1 -1
- package/dist/request/onboarding.js +2 -2
- package/dist/request/onboarding.js.map +1 -1
- package/dist/request/parse.d.ts.map +1 -1
- package/dist/request/parse.js +2 -3
- package/dist/request/parse.js.map +1 -1
- package/dist/resourceLog/controller.d.ts +34 -12
- package/dist/resourceLog/controller.d.ts.map +1 -1
- package/dist/resourceLog/controller.js +79 -86
- package/dist/resourceLog/controller.js.map +1 -1
- package/dist/resourceLog/document.d.ts +182 -0
- package/dist/resourceLog/document.d.ts.map +1 -0
- package/dist/resourceLog/document.js +159 -0
- package/dist/resourceLog/document.js.map +1 -0
- package/dist/resourceLog/errors.d.ts +47 -8
- package/dist/resourceLog/errors.d.ts.map +1 -1
- package/dist/resourceLog/errors.js +54 -8
- package/dist/resourceLog/errors.js.map +1 -1
- package/dist/resourceLog/index.d.ts +7 -3
- package/dist/resourceLog/index.d.ts.map +1 -1
- package/dist/resourceLog/index.js +7 -3
- package/dist/resourceLog/index.js.map +1 -1
- package/dist/resourceLog/ladderRungs.d.ts +35 -0
- package/dist/resourceLog/ladderRungs.d.ts.map +1 -0
- package/dist/resourceLog/ladderRungs.js +352 -0
- package/dist/resourceLog/ladderRungs.js.map +1 -0
- package/dist/resourceLog/license.d.ts +42 -17
- package/dist/resourceLog/license.d.ts.map +1 -1
- package/dist/resourceLog/license.js +38 -24
- package/dist/resourceLog/license.js.map +1 -1
- package/dist/space/activity.d.ts +15 -15
- package/dist/space/activity.d.ts.map +1 -1
- package/dist/space/activity.js +15 -15
- package/dist/space/activity.js.map +1 -1
- package/dist/space/collections.d.ts +11 -0
- package/dist/space/collections.d.ts.map +1 -1
- package/dist/space/collections.js +13 -0
- package/dist/space/collections.js.map +1 -1
- package/dist/space/deleteSpace.d.ts +28 -0
- package/dist/space/deleteSpace.d.ts.map +1 -0
- package/dist/space/deleteSpace.js +44 -0
- package/dist/space/deleteSpace.js.map +1 -0
- package/dist/space/errors.d.ts.map +1 -1
- package/dist/space/errors.js +0 -1
- package/dist/space/errors.js.map +1 -1
- package/dist/space/index.d.ts +6 -0
- package/dist/space/index.d.ts.map +1 -1
- package/dist/space/index.js +6 -0
- package/dist/space/index.js.map +1 -1
- package/dist/space/plaintextCollection.d.ts +43 -0
- package/dist/space/plaintextCollection.d.ts.map +1 -0
- package/dist/space/plaintextCollection.js +17 -0
- package/dist/space/plaintextCollection.js.map +1 -0
- package/dist/stages.d.ts +23 -0
- package/dist/stages.d.ts.map +1 -0
- package/dist/stages.js +23 -0
- package/dist/stages.js.map +1 -0
- package/dist/sync/index.d.ts +7 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +7 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/push.js +4 -4
- package/dist/sync/push.js.map +1 -1
- package/dist/sync/remint.js +2 -2
- package/dist/sync/remint.js.map +1 -1
- package/dist/sync/types.d.ts +41 -1
- package/dist/sync/types.d.ts.map +1 -1
- package/dist/sync/types.js +47 -1
- package/dist/sync/types.js.map +1 -1
- package/dist/unlock/index.d.ts +5 -1
- package/dist/unlock/index.d.ts.map +1 -1
- package/dist/unlock/index.js +5 -1
- package/dist/unlock/index.js.map +1 -1
- package/dist/unlock/retire.d.ts +35 -7
- package/dist/unlock/retire.d.ts.map +1 -1
- package/dist/unlock/retire.js +52 -14
- package/dist/unlock/retire.js.map +1 -1
- package/dist/unlock/standingClient.d.ts.map +1 -1
- package/dist/unlock/standingClient.js +5 -1
- package/dist/unlock/standingClient.js.map +1 -1
- package/dist/unlock/standingWebvh.d.ts +217 -35
- package/dist/unlock/standingWebvh.d.ts.map +1 -1
- package/dist/unlock/standingWebvh.js +469 -210
- package/dist/unlock/standingWebvh.js.map +1 -1
- package/dist/webvh/accountEntry.d.ts +146 -0
- package/dist/webvh/accountEntry.d.ts.map +1 -0
- package/dist/webvh/accountEntry.js +239 -0
- package/dist/webvh/accountEntry.js.map +1 -0
- package/dist/webvh/didWeb.d.ts +12 -7
- package/dist/webvh/didWeb.d.ts.map +1 -1
- package/dist/webvh/didWeb.js +2 -2
- package/dist/webvh/didWeb.js.map +1 -1
- package/dist/webvh/didWebProjection.d.ts +164 -0
- package/dist/webvh/didWebProjection.d.ts.map +1 -0
- package/dist/webvh/didWebProjection.js +230 -0
- package/dist/webvh/didWebProjection.js.map +1 -0
- package/dist/webvh/didWebvh.d.ts +275 -136
- package/dist/webvh/didWebvh.d.ts.map +1 -1
- package/dist/webvh/didWebvh.js +307 -340
- package/dist/webvh/didWebvh.js.map +1 -1
- package/dist/webvh/enrollClient.d.ts +65 -0
- package/dist/webvh/enrollClient.d.ts.map +1 -0
- package/dist/webvh/enrollClient.js +172 -0
- package/dist/webvh/enrollClient.js.map +1 -0
- package/dist/webvh/index.d.ts +37 -12
- package/dist/webvh/index.d.ts.map +1 -1
- package/dist/webvh/index.js +33 -10
- package/dist/webvh/index.js.map +1 -1
- package/dist/webvh/listClients.d.ts +1 -35
- package/dist/webvh/listClients.d.ts.map +1 -1
- package/dist/webvh/listClients.js +2 -30
- package/dist/webvh/listClients.js.map +1 -1
- package/dist/webvh/revokeClient.d.ts +41 -11
- package/dist/webvh/revokeClient.d.ts.map +1 -1
- package/dist/webvh/revokeClient.js +99 -48
- package/dist/webvh/revokeClient.js.map +1 -1
- package/dist/webvh/standingZcap.d.ts +61 -14
- package/dist/webvh/standingZcap.d.ts.map +1 -1
- package/dist/webvh/standingZcap.js +91 -0
- package/dist/webvh/standingZcap.js.map +1 -1
- package/dist/webvh/verifyLog.d.ts +59 -5
- package/dist/webvh/verifyLog.d.ts.map +1 -1
- package/dist/webvh/verifyLog.js +76 -11
- package/dist/webvh/verifyLog.js.map +1 -1
- package/dist/webvh/wasIdStore.d.ts +8 -8
- package/dist/webvh/wasIdStore.d.ts.map +1 -1
- package/dist/webvh/wasIdStore.js +39 -14
- package/dist/webvh/wasIdStore.js.map +1 -1
- package/dist/webvh/zcap.d.ts +14 -1
- package/dist/webvh/zcap.d.ts.map +1 -1
- package/dist/webvh/zcap.js +3 -27
- package/dist/webvh/zcap.js.map +1 -1
- package/package.json +2 -2
- package/dist/webvh/keyAgreement.d.ts +0 -97
- package/dist/webvh/keyAgreement.d.ts.map +0 -1
- package/dist/webvh/keyAgreement.js +0 -71
- package/dist/webvh/keyAgreement.js.map +0 -1
package/dist/recovery/index.js
CHANGED
|
@@ -3,20 +3,24 @@
|
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
5
|
* The `@interop/wallet-core/recovery` subpath: recovery codes on the roster
|
|
6
|
-
* identity model -- a code as a
|
|
6
|
+
* identity model -- a code as a standing unlock credential that retires on
|
|
7
|
+
* spend.
|
|
7
8
|
*
|
|
8
9
|
* - `generateRecoveryCode` / `formatRecoveryCode` / `normalizeRecoveryCode` /
|
|
9
10
|
* `decodeRecoveryCode` / `RECOVERY_KDF` -- the format layer and the code's
|
|
10
11
|
* own unlock-derivation parameter set (its salt distinct from every other
|
|
11
12
|
* unlock method's).
|
|
12
|
-
* - `recoveryClientFromCode` -- the deterministic client key set:
|
|
13
|
-
*
|
|
14
|
-
*
|
|
13
|
+
* - `recoveryClientFromCode` -- the deterministic client key set: unlock
|
|
14
|
+
* identity, client seed (signing + key-agreement pair), binding MAC key,
|
|
15
|
+
* and the update-key ladder seed, whose rung 0 is the did:webvh update key
|
|
16
|
+
* whose hash stands pre-committed and whose VM signs the code's own bridge.
|
|
15
17
|
* - The record codec lives in `@interop/wallet-core/unlock` now
|
|
16
18
|
* (`wrapUnlockRecord` / `unwrapUnlockRecord`, re-exported here): a
|
|
17
|
-
* recovery record is an unlock record with no ladder member
|
|
18
|
-
*
|
|
19
|
-
*
|
|
19
|
+
* recovery record is an unlock record with no ladder member (the code's
|
|
20
|
+
* ladder seed derives from the code bytes rather than riding the record) --
|
|
21
|
+
* the account pointer plus the pre-minted PUT-on-`did.jsonl` bridge
|
|
22
|
+
* delegation (never a seed, never a user key wrap), signed under the
|
|
23
|
+
* mixed-signer policy
|
|
20
24
|
* (the code's unlock key at issuance, an enrolled client's account key on
|
|
21
25
|
* a re-mint), with the account core authenticated by a MAC under a
|
|
22
26
|
* code-derived key, so a storage host can never redirect recovery at
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/recovery/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/recovery/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EACL,oBAAoB,EACpB,6BAA6B,EAC7B,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,2BAA2B,CAAA;AAOlC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,sBAAsB,EACtB,YAAY,EACb,MAAM,yBAAyB,CAAA;AAMhC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,4BAA4B,EAC5B,YAAY,EACZ,iBAAiB,EAClB,MAAM,oBAAoB,CAAA"}
|
|
@@ -65,16 +65,27 @@ export declare function decodeRecoveryCode({ code }: {
|
|
|
65
65
|
code: string;
|
|
66
66
|
}): Uint8Array;
|
|
67
67
|
/**
|
|
68
|
-
* The code's full client identity, derived deterministically from
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
* agents, and the public multibases / ids the issuance and recovery flows
|
|
74
|
-
* publish and look up.
|
|
68
|
+
* The code's full client identity, derived deterministically from its bytes:
|
|
69
|
+
* the 32-byte client seed (behind the code's Ed25519 signing pair and X25519
|
|
70
|
+
* key-agreement twin), the ladder seed behind its update authority, the
|
|
71
|
+
* derived agents, and the public multibases / ids the issuance and recovery
|
|
72
|
+
* flows publish and look up.
|
|
75
73
|
*/
|
|
76
74
|
export interface RecoveryClient extends UnlockClientIdentity {
|
|
77
75
|
codeBytes: Uint8Array;
|
|
76
|
+
/**
|
|
77
|
+
* The code's update-key ladder seed. Its VM is what signs the code's own
|
|
78
|
+
* bridge delegation, and its rung 0 is the code's committed update key, so
|
|
79
|
+
* the spend's reveal-and-commit entry is the ordinary ladder reveal. A code
|
|
80
|
+
* is spent on use and never self-rotates, so no rung past 0 is ever
|
|
81
|
+
* revealed; the ladder is what gives the code a verification method of its
|
|
82
|
+
* own beside that single rung.
|
|
83
|
+
*/
|
|
84
|
+
ladderSeed: Uint8Array;
|
|
85
|
+
/**
|
|
86
|
+
* Rung 0's 32-byte update-key seed -- the key the code's committed hash
|
|
87
|
+
* stands for, and the one the reveal-and-commit entry signs with.
|
|
88
|
+
*/
|
|
78
89
|
updateSeed: Uint8Array;
|
|
79
90
|
/**
|
|
80
91
|
* The symmetric key that MACs the recovery record's account binding:
|
|
@@ -82,7 +93,16 @@ export interface RecoveryClient extends UnlockClientIdentity {
|
|
|
82
93
|
* Derived from the code bytes, so the storage host never holds it.
|
|
83
94
|
*/
|
|
84
95
|
bindingMacKey: Uint8Array;
|
|
96
|
+
/**
|
|
97
|
+
* Rung 0's public multibase: the code's `updateKeyMultibase` as the
|
|
98
|
+
* registry records it and the document commits its hash.
|
|
99
|
+
*/
|
|
85
100
|
updateKeyMultibase: string;
|
|
101
|
+
/**
|
|
102
|
+
* The ladder VM's public multibase, as the account document publishes it
|
|
103
|
+
* under `assertionMethod` and `capabilityDelegation`.
|
|
104
|
+
*/
|
|
105
|
+
ladderVmKeyMultibase: string;
|
|
86
106
|
}
|
|
87
107
|
/**
|
|
88
108
|
* Derives the code's whole client identity from a (possibly formatted) code.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recoveryCode.d.ts","sourceRoot":"","sources":["../../src/recovery/recoveryCode.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"recoveryCode.d.ts","sourceRoot":"","sources":["../../src/recovery/recoveryCode.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAMvE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,KAAK,CAAA;AAErC;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,EAAE,SAM1B,CAAA;AAwBD;;;;;;GAMG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,SAAuC;CAI3D;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAI7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAErE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE1E;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAazE;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAe,SAAQ,oBAAoB;IAC1D,SAAS,EAAE,UAAU,CAAA;IACrB;;;;;;;OAOG;IACH,UAAU,EAAE,UAAU,CAAA;IACtB;;;OAGG;IACH,UAAU,EAAE,UAAU,CAAA;IACtB;;;;OAIG;IACH,aAAa,EAAE,UAAU,CAAA;IACzB;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAA;IAC1B;;;OAGG;IACH,oBAAoB,EAAE,MAAM,CAAA;CAC7B;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,IAAI,EACL,EAAE;IACD,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,cAAc,CAAC,CAqC1B"}
|
|
@@ -21,7 +21,10 @@ import { base58 } from '@scure/base';
|
|
|
21
21
|
import { hkdf } from '@noble/hashes/hkdf.js';
|
|
22
22
|
import { sha256 } from '@noble/hashes/sha2.js';
|
|
23
23
|
import { unlockClientIdentityFromSeed } from '../unlock/standingClient.js';
|
|
24
|
-
|
|
24
|
+
// The pinned base-side edge onto the ladder derivation helpers: a code's
|
|
25
|
+
// update authority IS a ladder, and re-deriving its rungs here would be a
|
|
26
|
+
// second copy of a permanent wire-level derivation.
|
|
27
|
+
import { ladderRung, ladderVmKeyMultibase } from '../clientAnnex/ladder.js';
|
|
25
28
|
/**
|
|
26
29
|
* The byte length of a recovery code: 16 random bytes is ~128 bits, enough
|
|
27
30
|
* that the unlock derivation is a single expansion rather than a stretched
|
|
@@ -45,11 +48,15 @@ export const RECOVERY_KDF = {
|
|
|
45
48
|
/**
|
|
46
49
|
* The HKDF salt for the code's client-side key set (distinct from the unlock
|
|
47
50
|
* salt above, so the unlock identity and the client identity can never
|
|
48
|
-
* collide), and the per-key expansion labels. All permanent.
|
|
51
|
+
* collide), and the per-key expansion labels. All permanent. The
|
|
52
|
+
* `ladder-seed` expansion replaced a standalone `update-key` one, whose label
|
|
53
|
+
* is retired and never reused: a code's committed update key is rung 0 of the
|
|
54
|
+
* ladder now, which is a different key, so a code issued under the retired
|
|
55
|
+
* label commits a rung nothing derives and cannot spend.
|
|
49
56
|
*/
|
|
50
57
|
const RECOVERY_CLIENT_SALT = 'freewallet/recovery/client-keys/v1';
|
|
51
58
|
const RECOVERY_CLIENT_SEED_INFO = 'client-seed';
|
|
52
|
-
const
|
|
59
|
+
const RECOVERY_LADDER_SEED_INFO = 'ladder-seed';
|
|
53
60
|
/**
|
|
54
61
|
* The HKDF info string for the code's account-binding MAC key, expanded
|
|
55
62
|
* under the unlock salt beside the unlock-seed expansion above. The key MACs
|
|
@@ -141,15 +148,20 @@ export async function recoveryClientFromCode({ code }) {
|
|
|
141
148
|
const codeBytes = decodeRecoveryCode({ code });
|
|
142
149
|
const salt = new TextEncoder().encode(RECOVERY_CLIENT_SALT);
|
|
143
150
|
const clientSeed = hkdf(sha256, codeBytes, salt, new TextEncoder().encode(RECOVERY_CLIENT_SEED_INFO), 32);
|
|
144
|
-
const
|
|
151
|
+
const ladderSeed = hkdf(sha256, codeBytes, salt, new TextEncoder().encode(RECOVERY_LADDER_SEED_INFO), 32);
|
|
145
152
|
const bindingMacKey = hkdf(sha256, codeBytes, new TextEncoder().encode(RECOVERY_KDF.salt), new TextEncoder().encode(RECOVERY_BINDING_MAC_INFO), 32);
|
|
146
153
|
const identity = await unlockClientIdentityFromSeed({ clientSeed });
|
|
154
|
+
// Rung 0 through the shared ladder derivation, so the code's committed
|
|
155
|
+
// update key is the same key the ladder's own reveal attributes.
|
|
156
|
+
const rung0 = await ladderRung({ ladderSeed, index: 0 });
|
|
147
157
|
return {
|
|
148
158
|
...identity,
|
|
149
159
|
codeBytes,
|
|
150
|
-
|
|
160
|
+
ladderSeed,
|
|
161
|
+
updateSeed: rung0.seed,
|
|
151
162
|
bindingMacKey,
|
|
152
|
-
updateKeyMultibase:
|
|
163
|
+
updateKeyMultibase: rung0.keyMultibase,
|
|
164
|
+
ladderVmKeyMultibase: await ladderVmKeyMultibase({ ladderSeed })
|
|
153
165
|
};
|
|
154
166
|
}
|
|
155
167
|
//# sourceMappingURL=recoveryCode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recoveryCode.js","sourceRoot":"","sources":["../../src/recovery/recoveryCode.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAE9C,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AAE1E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"recoveryCode.js","sourceRoot":"","sources":["../../src/recovery/recoveryCode.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recoveryDelegation.d.ts","sourceRoot":"","sources":["../../src/recovery/recoveryDelegation.ts"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAoB,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"recoveryDelegation.d.ts","sourceRoot":"","sources":["../../src/recovery/recoveryDelegation.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,11 +47,9 @@ import { X25519KeyAgreementKey2020 } from '@interop/x25519-key-agreement-key';
|
|
|
47
47
|
import { resourcePath, toUrl } from '@interop/was-client/paths';
|
|
48
48
|
import { log } from '../log.js';
|
|
49
49
|
import { DID_LOG_RESOURCE, ID_COLLECTION } from '../space/collections.js';
|
|
50
|
-
import { delegationKeyInDocument } from '../webvh/listClients.js';
|
|
51
|
-
import { vmFragmentOf } from '@interop/vh-resource-log';
|
|
52
50
|
import { getUnlockKeyringWithCapability, putUnlockKeyringWithCapability } from '../keyring/unlockSpace.js';
|
|
53
51
|
import { remintUnlockRecordDelegations, unlockRecordSealedTo } from '../unlock/unlockRecord.js';
|
|
54
|
-
import { delegationProofKeyId,
|
|
52
|
+
import { delegationProofKeyId, recordedZcapStale, STANDING_ZCAP_TTL_MS } from '../webvh/standingZcap.js';
|
|
55
53
|
/**
|
|
56
54
|
* The recovery delegation's lifetime: the house standing-zcap value
|
|
57
55
|
* ({@link STANDING_ZCAP_TTL_MS} -- one year, per NIST SP 800-57's
|
|
@@ -67,7 +65,7 @@ import { delegationProofKeyId, STANDING_ZCAP_TTL_MS, zcapExpiring } from '../web
|
|
|
67
65
|
* client's verification method leaving the document).
|
|
68
66
|
*/
|
|
69
67
|
export const RECOVERY_DELEGATION_TTL_MS = STANDING_ZCAP_TTL_MS;
|
|
70
|
-
// Re-exported from their shared
|
|
68
|
+
// Re-exported from their shared home (`webvh/standingZcap.ts`), so this
|
|
71
69
|
// module's public surface predating the move is unchanged.
|
|
72
70
|
export { ZCAP_RENEWAL_WINDOW_MS, zcapExpiring } from '../webvh/standingZcap.js';
|
|
73
71
|
/**
|
|
@@ -111,7 +109,7 @@ export async function delegateLogWrite({ zcapClient, pointer, recoveryClientDid,
|
|
|
111
109
|
expires: new Date(now + RECOVERY_DELEGATION_TTL_MS)
|
|
112
110
|
});
|
|
113
111
|
}
|
|
114
|
-
// Re-exported from its shared
|
|
112
|
+
// Re-exported from its shared home (`webvh/standingZcap.ts`), so this
|
|
115
113
|
// module's public surface is unchanged.
|
|
116
114
|
export { delegationProofKeyId };
|
|
117
115
|
/**
|
|
@@ -168,40 +166,29 @@ export async function remintRecoveryDelegations({ doc, entries, pointer, storage
|
|
|
168
166
|
let reminted = 0;
|
|
169
167
|
let skipped = 0;
|
|
170
168
|
const outcomes = [];
|
|
171
|
-
//
|
|
172
|
-
//
|
|
173
|
-
|
|
174
|
-
//
|
|
175
|
-
// the
|
|
176
|
-
//
|
|
177
|
-
|
|
178
|
-
const keyStands = (keyId) => delegationKeyInDocument({
|
|
169
|
+
// The house staleness policy, decided once in `webvh` and asked here over
|
|
170
|
+
// the scalars a registry entry records: expiry, the current-key-set rule
|
|
171
|
+
// (a recorded signing key the document no longer lists under
|
|
172
|
+
// `capabilityDelegation` -- or no recorded key at all -- has rotted), and
|
|
173
|
+
// the caller's retiring set, which the document still lists only until the
|
|
174
|
+
// entry that removes those keys lands.
|
|
175
|
+
const recordedStale = (delegationKeyId, expires) => recordedZcapStale({
|
|
179
176
|
doc,
|
|
180
|
-
...(
|
|
181
|
-
|
|
177
|
+
...(delegationKeyId ? { delegationKeyId } : {}),
|
|
178
|
+
...(expires ? { expires } : {}),
|
|
179
|
+
retiringKeyMultibases,
|
|
180
|
+
now
|
|
181
|
+
});
|
|
182
182
|
for (const entry of entries) {
|
|
183
|
-
const
|
|
184
|
-
//
|
|
185
|
-
//
|
|
186
|
-
//
|
|
187
|
-
const expiring = zcapExpiring({
|
|
188
|
-
...(entry.delegationExpires ? { expires: entry.delegationExpires } : {}),
|
|
189
|
-
now
|
|
190
|
-
});
|
|
191
|
-
// The annex Space sibling, where the entry records one, is checked
|
|
192
|
-
// on the same two axes; either member going stale re-mints BOTH in one
|
|
193
|
-
// atomic pass (both resealed, one registry-entry rewrite).
|
|
183
|
+
const stale = recordedStale(entry.delegationKeyId, entry.delegationExpires);
|
|
184
|
+
// The annex Space sibling, where the entry records one, is checked on the
|
|
185
|
+
// same axes; either member going stale re-mints BOTH in one atomic pass
|
|
186
|
+
// (both resealed, one registry-entry rewrite).
|
|
194
187
|
const siblingRecorded = entry.delegatedClientsKeyId !== undefined ||
|
|
195
188
|
entry.delegatedClientsExpires !== undefined;
|
|
196
189
|
const siblingStale = siblingRecorded &&
|
|
197
|
-
(
|
|
198
|
-
|
|
199
|
-
...(entry.delegatedClientsExpires
|
|
200
|
-
? { expires: entry.delegatedClientsExpires }
|
|
201
|
-
: {}),
|
|
202
|
-
now
|
|
203
|
-
}));
|
|
204
|
-
if (stands && !expiring && !siblingStale) {
|
|
190
|
+
recordedStale(entry.delegatedClientsKeyId, entry.delegatedClientsExpires);
|
|
191
|
+
if (!stale && !siblingStale) {
|
|
205
192
|
outcomes.push({
|
|
206
193
|
label: entry.label,
|
|
207
194
|
unlockSpaceId: entry.unlockSpaceId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recoveryDelegation.js","sourceRoot":"","sources":["../../src/recovery/recoveryDelegation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAG7E,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAC/B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"recoveryDelegation.js","sourceRoot":"","sources":["../../src/recovery/recoveryDelegation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { DIDDoc, DIDLog } from '@interop/did-method-webvh';
|
|
2
|
-
import type { ClientWebvhUpdateKeys,
|
|
2
|
+
import type { ClientWebvhUpdateKeys, WebvhEnrollmentKeys, WebvhIdStore } from '../webvh/didWebvh.js';
|
|
3
3
|
import type { ResourceLogPinStore } from '@interop/vh-resource-log';
|
|
4
|
+
import type { UnlockInventoryPart } from '../unlock/standingWebvh.js';
|
|
5
|
+
import type { AccountLogSigner } from '../webvh/accountEntry.js';
|
|
4
6
|
/**
|
|
5
7
|
* What the add-and-retire entry retired, read back OFF THE LOG -- the resumed
|
|
6
8
|
* spend's answer to the same question the live run answers from the document
|
|
@@ -58,6 +60,18 @@ export interface RecoveryPublicKeys {
|
|
|
58
60
|
keyAgreementKeyMultibase: string;
|
|
59
61
|
updateKeyMultibase: string;
|
|
60
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* The public halves a SPEND needs of the replacement code it publishes: the
|
|
65
|
+
* two above plus the code's ladder VM key, which the add-and-retire entry
|
|
66
|
+
* installs under `assertionMethod` and `capabilityDelegation`. A code is a
|
|
67
|
+
* standing unlock credential with a ladder (`decisions/0020`) and its bridge
|
|
68
|
+
* delegation is signed by that ladder's VM (`decisions/0019`), so a
|
|
69
|
+
* replacement published without the VM could neither sign its own bridge nor
|
|
70
|
+
* spend. `recoveryClientFromCode` produces all three.
|
|
71
|
+
*/
|
|
72
|
+
export interface ReplacementRecoveryPublicKeys extends RecoveryPublicKeys {
|
|
73
|
+
ladderVmKeyMultibase: string;
|
|
74
|
+
}
|
|
61
75
|
/**
|
|
62
76
|
* Thrown by the recovery continuation when the log carries neither the code's
|
|
63
77
|
* update key nor its committed hash -- the code was revoked (or never
|
|
@@ -73,59 +87,33 @@ export declare class RecoveryKeyNotCommittedError extends Error {
|
|
|
73
87
|
*/
|
|
74
88
|
export type RecoveryLogStore = Pick<WebvhIdStore, 'getIdResourceRaw' | 'putIdResource'>;
|
|
75
89
|
/**
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* against the pinned head is refused (`ResourceLogContinuityError`)
|
|
85
|
-
* @param [options.logId] {string} the account log's pin slot
|
|
86
|
-
* (`accountLogPinId({ spaceId })`); required whenever a `pinStore` is
|
|
87
|
-
* supplied
|
|
88
|
-
* @returns {Promise<PublishedWebvhLog>}
|
|
89
|
-
*/
|
|
90
|
-
export declare function readLogOrThrow({ store, expectedDid, pinStore, logId }: {
|
|
91
|
-
store: RecoveryLogStore;
|
|
92
|
-
expectedDid?: string;
|
|
93
|
-
pinStore?: ResourceLogPinStore;
|
|
94
|
-
logId?: string;
|
|
95
|
-
}): Promise<PublishedWebvhLog>;
|
|
96
|
-
/**
|
|
97
|
-
* Publishes `did.jsonl` through the narrow recovery seam -- the log only,
|
|
98
|
-
* never `did.json` (the delegation covers nothing else; the recovered
|
|
99
|
-
* session republishes the projection once it is the controller). The write is
|
|
100
|
-
* conditional on the read the entry was built on, and a lost race surfaces as
|
|
101
|
-
* a `WebvhLogConflictError` (the mapping lives in `putLogResource`).
|
|
90
|
+
* ISSUANCE: publishes a recovery code's split configuration into the
|
|
91
|
+
* document -- the code's `keyAgreement` verification method (an ordinary,
|
|
92
|
+
* unmarked Multikey entry, the key published verbatim: a code is
|
|
93
|
+
* high-entropy, so no commitment is needed), its rung-0 hash committed in
|
|
94
|
+
* `nextKeyHashes`, and its ladder VM. The code's update key joins
|
|
95
|
+
* `updateKeys` nowhere. A thin wrapper over the
|
|
96
|
+
* standing unlock-key inventory core ({@link publishUnlockKey}), which owns
|
|
97
|
+
* idempotence and the conditional publish.
|
|
102
98
|
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*/
|
|
109
|
-
export declare function publishLogOnly({ store, log, ifMatch }: {
|
|
110
|
-
store: RecoveryLogStore;
|
|
111
|
-
log: DIDLog;
|
|
112
|
-
ifMatch?: string;
|
|
113
|
-
}): Promise<void>;
|
|
114
|
-
/**
|
|
115
|
-
* ISSUANCE (run by an enrolled client, root authority): publishes a recovery
|
|
116
|
-
* code's split configuration into the document -- one entry adding the code's
|
|
117
|
-
* `keyAgreement` verification method (an ordinary, unmarked Multikey entry,
|
|
118
|
-
* the key published verbatim: a code is high-entropy, so no commitment is
|
|
119
|
-
* needed) and committing its update-key hash in `nextKeyHashes`. The code's
|
|
120
|
-
* update key joins `updateKeys` nowhere. A thin wrapper over the standing
|
|
121
|
-
* unlock-key inventory core ({@link publishUnlockKey}), which owns idempotence
|
|
122
|
-
* and the conditional publish.
|
|
99
|
+
* `part` is how the ladder branch splits the entry so the code's decryption
|
|
100
|
+
* material precedes its authority: a key entry (`'key'`), then the escrow,
|
|
101
|
+
* then an authority entry (`'authority'`) carrying the ladder VM and the
|
|
102
|
+
* rung-0 commitment. An enrolled client's issuance escrows before the entry
|
|
103
|
+
* and writes the merged `'all'` entry.
|
|
123
104
|
*
|
|
124
105
|
* @param options {object}
|
|
125
106
|
* @param options.idStore {WebvhIdStore}
|
|
126
|
-
* @param options.
|
|
127
|
-
* own did:webvh update-key seeds
|
|
107
|
+
* @param options.signer {AccountLogSigner} who signs the entry: the ISSUING
|
|
108
|
+
* client's own did:webvh update-key seeds, or the acting credential's
|
|
109
|
+
* ladder seed
|
|
128
110
|
* @param options.recovery {RecoveryPublicKeys} the code's public halves
|
|
111
|
+
* @param options.ladderSeed {Uint8Array} the code's OWN ladder seed,
|
|
112
|
+
* derived from the code bytes (`recoveryClientFromCode`). The entry
|
|
113
|
+
* installs that ladder's VM, and `recovery.updateKeyMultibase` is its
|
|
114
|
+
* rung 0
|
|
115
|
+
* @param [options.part] {string} `'all'` (the default), `'key'`, or
|
|
116
|
+
* `'authority'` -- see above
|
|
129
117
|
* @param [options.expectedDid] {string} the account DID the log must
|
|
130
118
|
* resolve to, from the caller's stored account pointer
|
|
131
119
|
* @param [options.pinStore] {ResourceLogPinStore} the caller's chain-head
|
|
@@ -137,10 +125,12 @@ export declare function publishLogOnly({ store, log, ifMatch }: {
|
|
|
137
125
|
* @returns {Promise<{ did: string, doc: DIDDoc, log: DIDLog }>} the account
|
|
138
126
|
* DID and the document and log as this call leaves them
|
|
139
127
|
*/
|
|
140
|
-
export declare function publishRecoveryKey({ idStore,
|
|
128
|
+
export declare function publishRecoveryKey({ idStore, signer, recovery, ladderSeed, part, expectedDid, pinStore, logId }: {
|
|
141
129
|
idStore: WebvhIdStore;
|
|
142
|
-
|
|
130
|
+
signer: AccountLogSigner;
|
|
143
131
|
recovery: RecoveryPublicKeys;
|
|
132
|
+
ladderSeed: Uint8Array;
|
|
133
|
+
part?: UnlockInventoryPart;
|
|
144
134
|
expectedDid?: string;
|
|
145
135
|
pinStore?: ResourceLogPinStore;
|
|
146
136
|
logId?: string;
|
|
@@ -150,21 +140,41 @@ export declare function publishRecoveryKey({ idStore, updateKeys, recovery, expe
|
|
|
150
140
|
log: DIDLog;
|
|
151
141
|
}>;
|
|
152
142
|
/**
|
|
153
|
-
* REVOCATION
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
143
|
+
* REVOCATION: removes a recovery code's whole inventory from the document --
|
|
144
|
+
* its `keyAgreement` verification method, its committed rung-0 hash, and its
|
|
145
|
+
* ladder VM -- in one entry, through the same shared inventory core
|
|
146
|
+
* ({@link removeUnlockKey}). The roster-side half (rotating the user key
|
|
147
|
+
* epoch off the code's wrap) is the caller's, and runs after this so the
|
|
148
|
+
* resolver's document no longer backs the removed entry.
|
|
149
|
+
*
|
|
150
|
+
* The revoker holds neither the code bytes nor its ladder seed, so the VM
|
|
151
|
+
* claim is seedless: the removal attributes it from the log, anchored on the
|
|
152
|
+
* rung-0 update-key multibase the registry recorded at issuance
|
|
153
|
+
* (`recovery.updateKeyMultibase`). The claim is required rather than
|
|
154
|
+
* best-effort. A VM no attribution arm claims refuses the whole revocation
|
|
155
|
+
* with `UnclaimedLadderVmRetirementError` before anything is written, since a
|
|
156
|
+
* standing ladder VM whose credential is otherwise retired keeps its
|
|
157
|
+
* delegation authority -- including the DELETE-only capability on the account
|
|
158
|
+
* Space that the account-deletion ceremony mints.
|
|
159
159
|
*
|
|
160
|
-
* @param options {object} see {@link publishRecoveryKey}
|
|
160
|
+
* @param options {object} see {@link publishRecoveryKey}, except that
|
|
161
|
+
* `ladderSeed` is optional here: a revoking client does not hold it, and
|
|
162
|
+
* the code's own holder is the only party who can supply it
|
|
163
|
+
* @param [options.projectionStore] {object} an `id`-collection store the
|
|
164
|
+
* caller may write through, passed straight to the inventory edit: the
|
|
165
|
+
* post-strike `did:web` projection is PUT through it immediately before
|
|
166
|
+
* that entry publishes, so a ladder-signed revocation does not leave
|
|
167
|
+
* `did.json` naming the revoked code. Best-effort, and omitted the
|
|
168
|
+
* behavior is unchanged (see `removeUnlockKey`)
|
|
161
169
|
* @returns {Promise<{ did: string, doc: DIDDoc, log: DIDLog }>} see
|
|
162
170
|
* {@link publishRecoveryKey}
|
|
163
171
|
*/
|
|
164
|
-
export declare function removeRecoveryKey({ idStore,
|
|
172
|
+
export declare function removeRecoveryKey({ idStore, signer, recovery, ladderSeed, projectionStore, expectedDid, pinStore, logId }: {
|
|
165
173
|
idStore: WebvhIdStore;
|
|
166
|
-
|
|
174
|
+
signer: AccountLogSigner;
|
|
167
175
|
recovery: RecoveryPublicKeys;
|
|
176
|
+
ladderSeed?: Uint8Array;
|
|
177
|
+
projectionStore?: Pick<WebvhIdStore, 'getIdResourceRaw' | 'putIdResource'>;
|
|
168
178
|
expectedDid?: string;
|
|
169
179
|
pinStore?: ResourceLogPinStore;
|
|
170
180
|
logId?: string;
|
|
@@ -199,8 +209,10 @@ export declare function removeRecoveryKey({ idStore, updateKeys, recovery, expec
|
|
|
199
209
|
* @param options.newClientUpdateSeeds {ClientWebvhUpdateKeys} the new
|
|
200
210
|
* client's update-key seeds (minted by the recovery flow, which therefore
|
|
201
211
|
* holds them and can sign the add entry)
|
|
202
|
-
* @param options.replacement {
|
|
203
|
-
* public halves
|
|
212
|
+
* @param options.replacement {ReplacementRecoveryPublicKeys} the
|
|
213
|
+
* replacement code's public halves -- its key-agreement key, its rung-0
|
|
214
|
+
* update key, and its ladder VM key -- committed and published in the same
|
|
215
|
+
* continuation
|
|
204
216
|
* @param options.onCommitted {function}
|
|
205
217
|
* `(committed: { builtOnHead: { scid, versionId } }) => Promise<void>` --
|
|
206
218
|
* the REQUIRED persist-before-publish seam. It runs once per attempt, after
|
|
@@ -260,7 +272,7 @@ export declare function recoverWebvhClient(options: {
|
|
|
260
272
|
};
|
|
261
273
|
newClientKeys: WebvhEnrollmentKeys;
|
|
262
274
|
newClientUpdateSeeds: ClientWebvhUpdateKeys;
|
|
263
|
-
replacement:
|
|
275
|
+
replacement: ReplacementRecoveryPublicKeys;
|
|
264
276
|
onCommitted: (committed: {
|
|
265
277
|
builtOnHead: {
|
|
266
278
|
scid: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recoveryWebvh.d.ts","sourceRoot":"","sources":["../../src/recovery/recoveryWebvh.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"recoveryWebvh.d.ts","sourceRoot":"","sources":["../../src/recovery/recoveryWebvh.ts"],"names":[],"mappings":"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"}
|