@interop/wallet-core 0.62.0 → 0.66.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 +119 -35
- package/dist/clientAnnex/establish.d.ts.map +1 -1
- package/dist/clientAnnex/establish.js +227 -160
- package/dist/clientAnnex/establish.js.map +1 -1
- package/dist/clientAnnex/forget.d.ts +18 -8
- package/dist/clientAnnex/forget.d.ts.map +1 -1
- package/dist/clientAnnex/forget.js +37 -64
- package/dist/clientAnnex/forget.js.map +1 -1
- package/dist/clientAnnex/forgetLast.d.ts +85 -38
- package/dist/clientAnnex/forgetLast.d.ts.map +1 -1
- package/dist/clientAnnex/forgetLast.js +155 -98
- 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 +16 -7
- package/dist/clientAnnex/gc.js.map +1 -1
- package/dist/clientAnnex/heal.d.ts +65 -14
- package/dist/clientAnnex/heal.d.ts.map +1 -1
- package/dist/clientAnnex/heal.js +397 -298
- package/dist/clientAnnex/heal.js.map +1 -1
- package/dist/clientAnnex/index.d.ts +23 -7
- package/dist/clientAnnex/index.d.ts.map +1 -1
- package/dist/clientAnnex/index.js +26 -7
- 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 +249 -41
- 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 +237 -53
- package/dist/clientAnnex/log.d.ts.map +1 -1
- package/dist/clientAnnex/log.js +533 -198
- 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 +44 -72
- 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 +22 -8
- package/dist/keys/index.d.ts.map +1 -1
- package/dist/keys/index.js +20 -6
- package/dist/keys/index.js.map +1 -1
- package/dist/keys/rosterLogStore.d.ts +15 -12
- package/dist/keys/rosterLogStore.d.ts.map +1 -1
- package/dist/keys/rosterLogStore.js +21 -16
- 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/userKeyCascade.d.ts +8 -5
- package/dist/keys/userKeyCascade.d.ts.map +1 -1
- package/dist/keys/userKeyCascade.js +7 -6
- package/dist/keys/userKeyCascade.js.map +1 -1
- package/dist/keys/userKeyRoster.d.ts +95 -8
- package/dist/keys/userKeyRoster.d.ts.map +1 -1
- package/dist/keys/userKeyRoster.js +278 -35
- package/dist/keys/userKeyRoster.js.map +1 -1
- package/dist/keys/userKeyRosterCascade.d.ts +117 -16
- package/dist/keys/userKeyRosterCascade.d.ts.map +1 -1
- package/dist/keys/userKeyRosterCascade.js +184 -43
- 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 +13 -9
- package/dist/recovery/index.d.ts.map +1 -1
- package/dist/recovery/index.js +12 -8
- 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 +23 -0
- package/dist/recovery/recoveryDelegation.d.ts.map +1 -1
- package/dist/recovery/recoveryDelegation.js +66 -46
- 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/appKey.d.ts +35 -1
- package/dist/request/appKey.d.ts.map +1 -1
- package/dist/request/appKey.js +29 -10
- package/dist/request/appKey.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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { addRecipient, initRecipients, ownerRecipient, removeRecipient, replaceRecipient, unwrapEpochSecret } from '@interop/was-client/edv';
|
|
2
2
|
import { vmFragmentOf } from '@interop/vh-resource-log';
|
|
3
|
-
import { commitmentMatcher, MULTIKEY_COMMITMENT_VM_TYPE } from '../webvh/didWebvh.js';
|
|
4
|
-
import { resolvedKeyAgreementMethods } from '../
|
|
3
|
+
import { clientKeyAgreementController, commitmentMatcher, MULTIKEY_COMMITMENT_VM_TYPE } from '../webvh/didWebvh.js';
|
|
4
|
+
import { resolvedKeyAgreementMethods } from '../resourceLog/document.js';
|
|
5
5
|
import { clientSigningKeyMultibase } from '../webvh/zcap.js';
|
|
6
6
|
/**
|
|
7
7
|
* Thrown when a served roster fails its client-side consistency checks: a
|
|
@@ -15,6 +15,46 @@ export class UserKeyRosterIntegrityError extends Error {
|
|
|
15
15
|
this.name = 'UserKeyRosterIntegrityError';
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Resolves a descriptor's current epoch, refusing a descriptor whose
|
|
20
|
+
* `currentEpoch` names no epoch in its own list -- the shape no enrolled
|
|
21
|
+
* client authenticated. Every site that resolves a current epoch goes
|
|
22
|
+
* through here, so the refusal has one implementation and one class.
|
|
23
|
+
*
|
|
24
|
+
* @param options {object}
|
|
25
|
+
* @param options.descriptor {CollectionEncryption}
|
|
26
|
+
* @param options.label {string} names the descriptor in the refusal, e.g.
|
|
27
|
+
* 'The user key roster' or 'The collection descriptor'
|
|
28
|
+
* @returns {CollectionEncryptionEpoch} the current epoch
|
|
29
|
+
* @throws {UserKeyRosterIntegrityError}
|
|
30
|
+
*/
|
|
31
|
+
export function currentEpochOf({ descriptor, label }) {
|
|
32
|
+
const currentEpoch = (descriptor.epochs ?? []).find(epoch => epoch.id === descriptor.currentEpoch);
|
|
33
|
+
if (!currentEpoch) {
|
|
34
|
+
throw new UserKeyRosterIntegrityError(`${label} names no current epoch in its own epoch list.`);
|
|
35
|
+
}
|
|
36
|
+
return currentEpoch;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Whether a roster's CURRENT epoch wraps to the named recipient -- the probe
|
|
40
|
+
* the enrollment wrap asks before adding, and the recipient-retiring cascade
|
|
41
|
+
* tail asks before rotating (a recipient with no current-epoch wrap has
|
|
42
|
+
* nothing to rotate off). Resolves the current epoch through
|
|
43
|
+
* {@link currentEpochOf}, so a roster whose `currentEpoch` names no epoch in
|
|
44
|
+
* its own list is refused rather than read as "not wrapped".
|
|
45
|
+
*
|
|
46
|
+
* @param options {object}
|
|
47
|
+
* @param options.descriptor {CollectionEncryption} the roster descriptor
|
|
48
|
+
* @param options.recipientId {string} the roster kid
|
|
49
|
+
* @returns {boolean}
|
|
50
|
+
* @throws {UserKeyRosterIntegrityError}
|
|
51
|
+
*/
|
|
52
|
+
export function rosterWrapsRecipient({ descriptor, recipientId }) {
|
|
53
|
+
return currentEpochOf({
|
|
54
|
+
descriptor,
|
|
55
|
+
label: 'The user key roster'
|
|
56
|
+
}).recipients.some(entry => entry.header.kid === recipientId);
|
|
57
|
+
}
|
|
18
58
|
/**
|
|
19
59
|
* Thrown when a served roster conflicts with the locally pinned latest-seen
|
|
20
60
|
* epoch -- the epochs list no longer contains the pinned epoch, or
|
|
@@ -205,6 +245,8 @@ export async function ensureUserKeyRoster({ store, userKey, clientKeyAgreementKe
|
|
|
205
245
|
* client's own (identity) key-agreement key, unwrapping each epoch for
|
|
206
246
|
* re-wrapping
|
|
207
247
|
* @returns {Promise<CollectionEncryption>} the refreshed roster descriptor
|
|
248
|
+
* @throws {UserKeyRosterIntegrityError} the descriptor's `currentEpoch`
|
|
249
|
+
* names no epoch in its own list
|
|
208
250
|
*/
|
|
209
251
|
export async function addUserKeyRosterRecipient({ store, recipient, ownerKeyAgreementKey }) {
|
|
210
252
|
const current = await store.read();
|
|
@@ -213,9 +255,7 @@ export async function addUserKeyRosterRecipient({ store, recipient, ownerKeyAgre
|
|
|
213
255
|
'provisioning before a client can be enrolled.');
|
|
214
256
|
}
|
|
215
257
|
const descriptor = current.descriptor;
|
|
216
|
-
|
|
217
|
-
const wrapped = currentEpoch?.recipients.some(entry => entry.header.kid === recipient.id);
|
|
218
|
-
if (wrapped) {
|
|
258
|
+
if (rosterWrapsRecipient({ descriptor, recipientId: recipient.id })) {
|
|
219
259
|
// A completed (or torn-after-the-wrap) earlier run: addRecipient writes
|
|
220
260
|
// every epoch's wrap in one descriptor write, so the current epoch
|
|
221
261
|
// standing means the escrow set is complete.
|
|
@@ -256,6 +296,83 @@ export async function rotateUserKeyRoster({ store, document, retireRecipientId }
|
|
|
256
296
|
pull: async () => { }
|
|
257
297
|
});
|
|
258
298
|
}
|
|
299
|
+
/**
|
|
300
|
+
* The error name a lost descriptor compare-and-swap surfaces as --
|
|
301
|
+
* was-client's `PreconditionFailedError`, and whatever an alternative store
|
|
302
|
+
* implementation throws under that name (the `EncryptionDescriptorStore` port
|
|
303
|
+
* documents the class).
|
|
304
|
+
*/
|
|
305
|
+
const PRECONDITION_FAILED_ERROR_NAME = 'PreconditionFailedError';
|
|
306
|
+
/**
|
|
307
|
+
* How many times the batched escrow re-reads and re-applies after losing the
|
|
308
|
+
* compare-and-swap. Matches was-client's own recipient-operation budget: a
|
|
309
|
+
* lost race means nothing was appended, so the license shot the append would
|
|
310
|
+
* spend is still standing.
|
|
311
|
+
*/
|
|
312
|
+
const ESCROW_CAS_ATTEMPTS = 3;
|
|
313
|
+
/**
|
|
314
|
+
* Escrows several recipients into every epoch in ONE descriptor write.
|
|
315
|
+
*
|
|
316
|
+
* was-client's `addRecipient` takes one recipient and does its own read,
|
|
317
|
+
* mutate and compare-and-swap, so a loop over it costs one write per
|
|
318
|
+
* recipient. On a log-governed store a write IS a log append, and a
|
|
319
|
+
* ladder-signed append is one-shot per licensed version, so the second
|
|
320
|
+
* recipient's append would be refused after the caller's pivot. The escrow
|
|
321
|
+
* crypto stays was-client's: `addRecipient` runs against a buffering store
|
|
322
|
+
* whose reads serve the staged descriptor and whose writes stay in memory,
|
|
323
|
+
* and the staged result is written back through the real store once, under
|
|
324
|
+
* the compare-and-swap token of the read the whole batch was built on.
|
|
325
|
+
*
|
|
326
|
+
* @param options {object}
|
|
327
|
+
* @param options.store {EncryptionDescriptorStore} the roster's descriptor
|
|
328
|
+
* store
|
|
329
|
+
* @param options.recipients {RecipientPublicKey[]} the incoming readers'
|
|
330
|
+
* public key-agreement keys; at least one
|
|
331
|
+
* @param options.ownerKeyAgreementKey {IKeyAgreementKey} a key-agreement
|
|
332
|
+
* key holding a wrap in every epoch, unwrapping each one for the escrow
|
|
333
|
+
* @returns {Promise<CollectionEncryption>} the roster as this write leaves
|
|
334
|
+
* it
|
|
335
|
+
*/
|
|
336
|
+
async function escrowRosterRecipients({ store, recipients, ownerKeyAgreementKey }) {
|
|
337
|
+
let lastError;
|
|
338
|
+
for (let attempt = 0; attempt < ESCROW_CAS_ATTEMPTS; attempt++) {
|
|
339
|
+
const read = await store.read();
|
|
340
|
+
if (read === null) {
|
|
341
|
+
throw new UserKeyRosterIntegrityError('The user key roster does not exist; there is nothing to escrow into.');
|
|
342
|
+
}
|
|
343
|
+
let staged = read.descriptor;
|
|
344
|
+
const buffer = {
|
|
345
|
+
read: async () => ({ descriptor: staged }),
|
|
346
|
+
replace: async (next) => {
|
|
347
|
+
staged = next;
|
|
348
|
+
}
|
|
349
|
+
};
|
|
350
|
+
for (const recipient of recipients) {
|
|
351
|
+
staged = await addRecipient({
|
|
352
|
+
store: buffer,
|
|
353
|
+
recipient,
|
|
354
|
+
owner: { keyAgreementKey: ownerKeyAgreementKey }
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
try {
|
|
358
|
+
await store.replace(staged, {
|
|
359
|
+
...(read.etag !== undefined ? { ifMatch: read.etag } : {})
|
|
360
|
+
});
|
|
361
|
+
return staged;
|
|
362
|
+
}
|
|
363
|
+
catch (err) {
|
|
364
|
+
if (err?.name === PRECONDITION_FAILED_ERROR_NAME) {
|
|
365
|
+
// A concurrent writer landed first: nothing of this batch was
|
|
366
|
+
// written, so re-read and re-apply.
|
|
367
|
+
lastError = err;
|
|
368
|
+
continue;
|
|
369
|
+
}
|
|
370
|
+
throw err;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
throw new Error('The user key roster escrow lost the compare-and-swap race after ' +
|
|
374
|
+
`${ESCROW_CAS_ATTEMPTS} attempts. Retry the convergence.`, { cause: lastError });
|
|
375
|
+
}
|
|
259
376
|
/**
|
|
260
377
|
* Rotates the roster off one or more recipients while escrowing incoming ones,
|
|
261
378
|
* in ONE descriptor write -- the transient-recovery continuation's mandatory
|
|
@@ -325,10 +442,10 @@ export async function replaceUserKeyRosterRecipients({ store, document, retireRe
|
|
|
325
442
|
* @returns {string[]} the current epoch's other kids, in epoch order
|
|
326
443
|
*/
|
|
327
444
|
export function rosterRecipientsToRetire({ descriptor, keepRecipientIds }) {
|
|
328
|
-
const currentEpoch = (
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
}
|
|
445
|
+
const currentEpoch = currentEpochOf({
|
|
446
|
+
descriptor,
|
|
447
|
+
label: 'The user key roster'
|
|
448
|
+
});
|
|
332
449
|
const keep = new Set(keepRecipientIds);
|
|
333
450
|
return [
|
|
334
451
|
...new Set(currentEpoch.recipients
|
|
@@ -336,6 +453,53 @@ export function rosterRecipientsToRetire({ descriptor, keepRecipientIds }) {
|
|
|
336
453
|
.filter(kid => !keep.has(kid)))
|
|
337
454
|
];
|
|
338
455
|
}
|
|
456
|
+
/**
|
|
457
|
+
* The enrolled clients the account document keys, as roster recipients. A
|
|
458
|
+
* client's `keyAgreement` twin carries the controller marker
|
|
459
|
+
* `did:key:<its signing multibase>` (`clientKeyAgreementController` is the one
|
|
460
|
+
* write-side builder), so the marker names the signing half and the method
|
|
461
|
+
* carries the key-agreement half -- together, exactly the pair
|
|
462
|
+
* {@link rosterRecipientKid} takes. That is what makes the escrow direction of
|
|
463
|
+
* the convergence possible from the document alone.
|
|
464
|
+
*
|
|
465
|
+
* A standing unlock credential is deliberately not here, and not because it is
|
|
466
|
+
* unwanted. Its roster kid names its standing client's SIGNING key, which the
|
|
467
|
+
* document never publishes: the document carries the credential's
|
|
468
|
+
* key-agreement key (or a commitment to it) and nothing else, so no reader can
|
|
469
|
+
* rebuild the kid its own roster reads look for. A credential's missing wrap
|
|
470
|
+
* is therefore mended by the ceremony that holds the credential, never here.
|
|
471
|
+
*
|
|
472
|
+
* @param options {object}
|
|
473
|
+
* @param options.document {KeyAgreementDocument} the locally verified
|
|
474
|
+
* did:webvh document
|
|
475
|
+
* @returns {RecipientPublicKey[]} in document order
|
|
476
|
+
*/
|
|
477
|
+
export function enrolledClientRosterRecipients({ document }) {
|
|
478
|
+
const recipients = [];
|
|
479
|
+
for (const method of resolvedKeyAgreementMethods({ doc: document })) {
|
|
480
|
+
const controller = method.controller;
|
|
481
|
+
const keyAgreementKeyMultibase = method.publicKeyMultibase;
|
|
482
|
+
if (method.type === MULTIKEY_COMMITMENT_VM_TYPE ||
|
|
483
|
+
typeof controller !== 'string' ||
|
|
484
|
+
typeof keyAgreementKeyMultibase !== 'string') {
|
|
485
|
+
continue;
|
|
486
|
+
}
|
|
487
|
+
// The marker is read by rebuilding it: whatever the third segment holds is
|
|
488
|
+
// a candidate signing multibase, and the marker matches only when the one
|
|
489
|
+
// write-side builder produces the controller verbatim.
|
|
490
|
+
const [, , signingKeyMultibase] = controller.split(':');
|
|
491
|
+
if (signingKeyMultibase === undefined ||
|
|
492
|
+
signingKeyMultibase === '' ||
|
|
493
|
+
clientKeyAgreementController({ signingKeyMultibase }) !== controller) {
|
|
494
|
+
continue;
|
|
495
|
+
}
|
|
496
|
+
recipients.push({
|
|
497
|
+
id: rosterRecipientKid({ signingKeyMultibase, keyAgreementKeyMultibase }),
|
|
498
|
+
publicKeyMultibase: keyAgreementKeyMultibase
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
return recipients;
|
|
502
|
+
}
|
|
339
503
|
/**
|
|
340
504
|
* Converges the roster onto the account document: the standing detector for a
|
|
341
505
|
* revocation cascade torn between its two halves. The cascade edits the
|
|
@@ -348,9 +512,30 @@ export function rosterRecipientsToRetire({ descriptor, keepRecipientIds }) {
|
|
|
348
512
|
* document-backed resolver cannot answer for is exactly a recipient the
|
|
349
513
|
* document no longer keys, so a healthy account reads the descriptor and
|
|
350
514
|
* writes nothing. When any such recipient is found the roster is rotated away
|
|
351
|
-
* from ALL of them at once
|
|
352
|
-
*
|
|
353
|
-
*
|
|
515
|
+
* from ALL of them at once, because the resolver drops every unbacked entry
|
|
516
|
+
* from the fresh epoch, not just the one named as retiring.
|
|
517
|
+
*
|
|
518
|
+
* The convergence runs in TWO directions, in one append. The retire direction
|
|
519
|
+
* is above. The escrow direction is its mirror: an enrolled client the
|
|
520
|
+
* document keys that holds no wrap in the current epoch is escrowed into every
|
|
521
|
+
* epoch ({@link enrolledClientRosterRecipients} names the candidates). That is
|
|
522
|
+
* the mender for a ceremony torn between the entry that published a client and
|
|
523
|
+
* the append that was to wrap the user key to it -- the one-request window a
|
|
524
|
+
* ladder-signed enrollment approval leaves, where the ladder's append is
|
|
525
|
+
* licensed only as the tail of its own entry and cannot precede it. A standing
|
|
526
|
+
* unlock credential is not a candidate: its roster kid names a signing key the
|
|
527
|
+
* document does not publish (see the helper), so its missing wrap is mended by
|
|
528
|
+
* the ceremony holding the credential.
|
|
529
|
+
*
|
|
530
|
+
* Either direction, and both together, cost exactly ONE descriptor write. A
|
|
531
|
+
* convergence needing both rides `replaceRecipient`; a pure escrow rides
|
|
532
|
+
* {@link escrowRosterRecipients}, which stages every missing recipient's
|
|
533
|
+
* wraps through was-client's `addRecipient` and writes once, so the user key
|
|
534
|
+
* is not rotated for a missing wrap and a ladder-signed convergence never
|
|
535
|
+
* needs a second append it has no license for. A healthy roster writes
|
|
536
|
+
* nothing at all. The escrow direction needs a key that unwraps every epoch,
|
|
537
|
+
* so it runs only for a caller that supplies `ownerKeyAgreementKey`; without
|
|
538
|
+
* one the retire direction runs alone.
|
|
354
539
|
*
|
|
355
540
|
* Rotating onto nobody is refused: a current epoch in which NO recipient is
|
|
356
541
|
* backed by the document is a mismatched pair (a stale document, the wrong
|
|
@@ -370,29 +555,38 @@ export function rosterRecipientsToRetire({ descriptor, keepRecipientIds }) {
|
|
|
370
555
|
* @param [options.descriptor] {CollectionEncryption} a descriptor the caller
|
|
371
556
|
* has just read (a login-time roster read), to save a re-read; omitted, the
|
|
372
557
|
* roster is read fresh
|
|
558
|
+
* @param [options.ownerKeyAgreementKey] {IKeyAgreementKey} a key-agreement
|
|
559
|
+
* key holding a wrap in every epoch, unwrapping each one for the escrow
|
|
560
|
+
* direction; omitted, only the retire direction runs
|
|
373
561
|
* @returns {Promise<object>} whether the roster rotated on this call, the
|
|
374
|
-
* stale recipient kids found, and the roster descriptor
|
|
375
|
-
* (`null` when the account has no roster yet)
|
|
562
|
+
* stale recipient kids found, the kids escrowed, and the roster descriptor
|
|
563
|
+
* as it now stands (`null` when the account has no roster yet)
|
|
376
564
|
*/
|
|
377
|
-
export async function convergeUserKeyRosterToDocument({ store, document, descriptor }) {
|
|
565
|
+
export async function convergeUserKeyRosterToDocument({ store, document, descriptor, ownerKeyAgreementKey }) {
|
|
378
566
|
let roster = descriptor;
|
|
379
567
|
if (!roster) {
|
|
380
568
|
const read = await store.read();
|
|
381
569
|
if (read === null) {
|
|
382
|
-
return {
|
|
570
|
+
return {
|
|
571
|
+
rotated: false,
|
|
572
|
+
staleRecipientIds: [],
|
|
573
|
+
escrowedRecipientIds: [],
|
|
574
|
+
descriptor: null
|
|
575
|
+
};
|
|
383
576
|
}
|
|
384
577
|
roster = read.descriptor;
|
|
385
578
|
}
|
|
386
|
-
const
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
}
|
|
579
|
+
const currentEpoch = currentEpochOf({
|
|
580
|
+
descriptor: roster,
|
|
581
|
+
label: 'The user key roster'
|
|
582
|
+
});
|
|
391
583
|
const resolveRecipientKey = userKeyRosterRecipientResolver({ document });
|
|
392
584
|
const staleRecipientIds = [];
|
|
393
585
|
let backed = 0;
|
|
586
|
+
const wrappedKids = new Set();
|
|
394
587
|
for (const entry of currentEpoch.recipients) {
|
|
395
588
|
const kid = entry.header.kid;
|
|
589
|
+
wrappedKids.add(kid);
|
|
396
590
|
if ((await resolveRecipientKey(kid)) === null) {
|
|
397
591
|
staleRecipientIds.push(kid);
|
|
398
592
|
}
|
|
@@ -400,21 +594,71 @@ export async function convergeUserKeyRosterToDocument({ store, document, descrip
|
|
|
400
594
|
backed++;
|
|
401
595
|
}
|
|
402
596
|
}
|
|
403
|
-
|
|
404
|
-
|
|
597
|
+
const escrow = ownerKeyAgreementKey
|
|
598
|
+
? {
|
|
599
|
+
ownerKeyAgreementKey,
|
|
600
|
+
recipients: enrolledClientRosterRecipients({ document }).filter(recipient => !wrappedKids.has(recipient.id))
|
|
601
|
+
}
|
|
602
|
+
: undefined;
|
|
603
|
+
const escrowedRecipientIds = (escrow?.recipients ?? []).map(recipient => recipient.id);
|
|
604
|
+
if (staleRecipientIds.length === 0 && escrowedRecipientIds.length === 0) {
|
|
605
|
+
return {
|
|
606
|
+
rotated: false,
|
|
607
|
+
staleRecipientIds,
|
|
608
|
+
escrowedRecipientIds,
|
|
609
|
+
descriptor: roster
|
|
610
|
+
};
|
|
405
611
|
}
|
|
406
|
-
if (backed === 0) {
|
|
612
|
+
if (staleRecipientIds.length > 0 && backed === 0) {
|
|
407
613
|
throw new UserKeyRosterIntegrityError('No user key roster recipient is keyed by the account document; refusing ' +
|
|
408
614
|
'to rotate the roster onto no one.');
|
|
409
615
|
}
|
|
410
|
-
//
|
|
411
|
-
//
|
|
412
|
-
|
|
616
|
+
// A pure removal is `removeRecipient`'s shape and a pure escrow is
|
|
617
|
+
// `addRecipient`'s; was-client refuses `replaceRecipient` for either, and
|
|
618
|
+
// that is also where the append counts differ. One direction at a time:
|
|
619
|
+
if (escrow === undefined || escrow.recipients.length === 0) {
|
|
620
|
+
const rotated = await rotateUserKeyRoster({
|
|
621
|
+
store,
|
|
622
|
+
document,
|
|
623
|
+
retireRecipientId: staleRecipientIds[0]
|
|
624
|
+
});
|
|
625
|
+
return {
|
|
626
|
+
rotated: true,
|
|
627
|
+
staleRecipientIds,
|
|
628
|
+
escrowedRecipientIds,
|
|
629
|
+
descriptor: rotated
|
|
630
|
+
};
|
|
631
|
+
}
|
|
632
|
+
// One append for every incoming recipient together, and no fresh epoch, so
|
|
633
|
+
// a ladder-signed convergence spends exactly one licensed append whatever
|
|
634
|
+
// the tear left missing.
|
|
635
|
+
if (staleRecipientIds.length === 0) {
|
|
636
|
+
return {
|
|
637
|
+
rotated: false,
|
|
638
|
+
staleRecipientIds,
|
|
639
|
+
escrowedRecipientIds,
|
|
640
|
+
descriptor: await escrowRosterRecipients({
|
|
641
|
+
store,
|
|
642
|
+
recipients: escrow.recipients,
|
|
643
|
+
ownerKeyAgreementKey: escrow.ownerKeyAgreementKey
|
|
644
|
+
})
|
|
645
|
+
};
|
|
646
|
+
}
|
|
647
|
+
const converged = await replaceUserKeyRosterRecipients({
|
|
413
648
|
store,
|
|
414
649
|
document,
|
|
415
|
-
|
|
650
|
+
retireRecipientIds: staleRecipientIds,
|
|
651
|
+
recipients: escrow.recipients,
|
|
652
|
+
ownerKeyAgreementKey: escrow.ownerKeyAgreementKey
|
|
416
653
|
});
|
|
417
|
-
return {
|
|
654
|
+
return {
|
|
655
|
+
// An escrow-only convergence writes wraps without minting an epoch, so
|
|
656
|
+
// the fresh epoch id is what says whether the user key rotated.
|
|
657
|
+
rotated: converged.currentEpoch !== roster.currentEpoch,
|
|
658
|
+
staleRecipientIds,
|
|
659
|
+
escrowedRecipientIds,
|
|
660
|
+
descriptor: converged
|
|
661
|
+
};
|
|
418
662
|
}
|
|
419
663
|
export async function readUserKeyRoster({ store, descriptor: knownDescriptor, userKey, clientKeyAgreementKey, pinnedEpochId }) {
|
|
420
664
|
let descriptor = knownDescriptor;
|
|
@@ -425,13 +669,12 @@ export async function readUserKeyRoster({ store, descriptor: knownDescriptor, us
|
|
|
425
669
|
}
|
|
426
670
|
descriptor = current.descriptor;
|
|
427
671
|
}
|
|
672
|
+
const currentEpoch = currentEpochOf({
|
|
673
|
+
descriptor,
|
|
674
|
+
label: 'The user key roster'
|
|
675
|
+
});
|
|
428
676
|
const epochIds = (descriptor.epochs ?? []).map(epoch => epoch.id);
|
|
429
|
-
const currentIndex =
|
|
430
|
-
? epochIds.indexOf(descriptor.currentEpoch)
|
|
431
|
-
: -1;
|
|
432
|
-
if (currentIndex === -1) {
|
|
433
|
-
throw new UserKeyRosterIntegrityError('The user key roster names no current epoch in its own epoch list.');
|
|
434
|
-
}
|
|
677
|
+
const currentIndex = epochIds.indexOf(currentEpoch.id);
|
|
435
678
|
if (pinnedEpochId) {
|
|
436
679
|
const pinnedIndex = epochIds.indexOf(pinnedEpochId);
|
|
437
680
|
if (pinnedIndex === -1 || currentIndex < pinnedIndex) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userKeyRoster.js","sourceRoot":"","sources":["../../src/keys/userKeyRoster.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"userKeyRoster.js","sourceRoot":"","sources":["../../src/keys/userKeyRoster.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,10 +11,11 @@
|
|
|
11
11
|
* from the document the edit itself just resolved to (no re-fetch of the
|
|
12
12
|
* log the ceremony just extended). On a log-governed roster store this
|
|
13
13
|
* function itself guarantees post-edit anchoring: the controller view built
|
|
14
|
-
* from the edit's own post-edit log is set as the store's
|
|
15
|
-
* (`
|
|
16
|
-
* and the seal backstop anchor at or past the edit
|
|
17
|
-
* injected controller resolution still serves a
|
|
14
|
+
* from the edit's own post-edit log is set as the store's minimum controller
|
|
15
|
+
* version (`setMinimumControllerVersion`) before anything roster-side
|
|
16
|
+
* runs, so the rotation and the seal backstop anchor at or past the edit
|
|
17
|
+
* even where the app's injected controller resolution still serves a
|
|
18
|
+
* cached pre-edit view. The
|
|
18
19
|
* roster delivers, never sources, so the stage names no recipient at all:
|
|
19
20
|
* it converges the roster onto that document (the login sweep's own path),
|
|
20
21
|
* retiring every current-epoch recipient the document no longer keys in one
|
|
@@ -35,6 +36,20 @@
|
|
|
35
36
|
* epoch names a non-current key generation -- so a mid-cascade crash strands
|
|
36
37
|
* nothing permanently and a naive full re-run finishes it (the login-time
|
|
37
38
|
* completion sweep is the standing backstop).
|
|
39
|
+
*
|
|
40
|
+
* The tail has two entry points over the same preamble and fan-out.
|
|
41
|
+
* `rotateRosterToDocumentAndCascade` is the document-converging one above,
|
|
42
|
+
* for a ceremony whose document edit has already landed.
|
|
43
|
+
* `retireRosterRecipientAndCascade` is the recipient-naming one: for a
|
|
44
|
+
* ceremony that must rotate BEFORE its own document edit -- the two forget
|
|
45
|
+
* ceremonies, where the forgetting client can sign nothing after its removal
|
|
46
|
+
* entry -- the document still lists the retiring recipient, so convergence
|
|
47
|
+
* would retire nothing, and the caller names the roster kid to retire
|
|
48
|
+
* instead. That entry point reads the fresh key back through a key the
|
|
49
|
+
* caller names (the standing credential's, whose wrap survives the rotation)
|
|
50
|
+
* and runs no seal backstop: with the document edit still ahead, there is no
|
|
51
|
+
* removal to seal against, and on the last-client transition the rotation
|
|
52
|
+
* itself is the one ladder-signed append its anchor licenses.
|
|
38
53
|
*/
|
|
39
54
|
import type { DIDDoc, DIDLog } from '@interop/did-method-webvh';
|
|
40
55
|
import type { IKeyAgreementKey } from '@interop/data-integrity-core';
|
|
@@ -67,8 +82,11 @@ export interface CascadeCollections {
|
|
|
67
82
|
isEncrypted?: (collectionId: string) => Promise<boolean>;
|
|
68
83
|
}
|
|
69
84
|
/**
|
|
70
|
-
* What the shared tail reports: whether the roster
|
|
71
|
-
*
|
|
85
|
+
* What the shared tail reports: whether the roster rotated on this run -- a
|
|
86
|
+
* re-run of an already-complete ceremony reports `false`; the
|
|
87
|
+
* document-converging entry point reads it off the adopting read, so a
|
|
88
|
+
* caller holding no cached key sees `true` on its first read either way,
|
|
89
|
+
* while the recipient-retiring one reports whether THIS call appended -- the roster's
|
|
72
90
|
* seal-backstop report (present when the roster store is sealable and the
|
|
73
91
|
* roster stage ran), the per-collection fan-out result, and the rotated key
|
|
74
92
|
* with the roster descriptor it was read from.
|
|
@@ -80,6 +98,41 @@ export interface RosterCascadeResult {
|
|
|
80
98
|
userKey?: UserKey;
|
|
81
99
|
rosterDescriptor?: CollectionEncryption;
|
|
82
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* The post-edit anchoring guarantee, shared by both entry points: the roster
|
|
103
|
+
* appends -- and the seal backstop's removal detection -- must run under a
|
|
104
|
+
* controller view that includes the log the ceremony is anchoring at, or the
|
|
105
|
+
* rotation anchors before it (a revocation's rotation leaves the log
|
|
106
|
+
* unsealed with the seal blind to the removal; the last-client transition's
|
|
107
|
+
* ladder-signed rotation lands before its reinstall version and the
|
|
108
|
+
* ceremony-tail license refuses it). Rather than leaving that to the
|
|
109
|
+
* injected store's own controller wiring, the view built from the ceremony's
|
|
110
|
+
* log is set as the store's minimum controller version; a fresher resolved
|
|
111
|
+
* view still wins. A store that is not log-governed has no controller view
|
|
112
|
+
* to anchor and is left alone. Exported for the one caller that reads the
|
|
113
|
+
* roster before its anchoring entry exists (the last-client transition's
|
|
114
|
+
* pre-pair probe, anchored at the pre-transition head it verified).
|
|
115
|
+
*
|
|
116
|
+
* @param options {object}
|
|
117
|
+
* @param options.rosterStore {EncryptionDescriptorStore}
|
|
118
|
+
* @param options.did {string}
|
|
119
|
+
* @param options.log {DIDLog}
|
|
120
|
+
*/
|
|
121
|
+
export declare function anchorRosterStoreAt({ rosterStore, did, log }: {
|
|
122
|
+
rosterStore: EncryptionDescriptorStore;
|
|
123
|
+
did: string;
|
|
124
|
+
log: DIDLog;
|
|
125
|
+
}): void;
|
|
126
|
+
/**
|
|
127
|
+
* Persists a rotated key: called with `{ userKey, latestEpochId, descriptor }`
|
|
128
|
+
* after the roster read and BEFORE the fan-out. The key and the epoch pin
|
|
129
|
+
* must persist atomically.
|
|
130
|
+
*/
|
|
131
|
+
export type UserKeyAdoptedHook = (adopted: {
|
|
132
|
+
userKey: UserKey;
|
|
133
|
+
latestEpochId: string;
|
|
134
|
+
descriptor: CollectionEncryption;
|
|
135
|
+
}) => Promise<void>;
|
|
83
136
|
/**
|
|
84
137
|
* Runs the roster rotation (with its seal backstop) and the collection
|
|
85
138
|
* fan-out over the document a ceremony's own edit just published. See the
|
|
@@ -90,16 +143,15 @@ export interface RosterCascadeResult {
|
|
|
90
143
|
* `key-map/user-key.jsonl` roster store
|
|
91
144
|
* @param options.did {string} the account's did:webvh
|
|
92
145
|
* @param options.doc {DIDDoc} the document as the ceremony's edit left it
|
|
93
|
-
* @param options.log {DIDLog} the post-edit log, which the
|
|
94
|
-
* is built from
|
|
146
|
+
* @param options.log {DIDLog} the post-edit log, which the minimum
|
|
147
|
+
* controller version is built from
|
|
95
148
|
* @param [options.userKey] {UserKey} this client's cached user key
|
|
96
149
|
* @param options.clientKeyAgreementKey {IKeyAgreementKey} this client's own
|
|
97
150
|
* (identity) key-agreement key -- its roster entry
|
|
98
151
|
* @param [options.pinnedEpochId] {string} the locally pinned latest-seen
|
|
99
152
|
* roster epoch
|
|
100
|
-
* @param [options.onUserKeyAdopted] {
|
|
101
|
-
*
|
|
102
|
-
* and BEFORE the fan-out. The key and the epoch pin must persist atomically
|
|
153
|
+
* @param [options.onUserKeyAdopted] {UserKeyAdoptedHook} persists a
|
|
154
|
+
* rotated key
|
|
103
155
|
* @param options.collections {CascadeCollections} the fan-out's work
|
|
104
156
|
* @returns {Promise<RosterCascadeResult>}
|
|
105
157
|
*/
|
|
@@ -111,11 +163,60 @@ export declare function rotateRosterToDocumentAndCascade({ rosterStore, did, doc
|
|
|
111
163
|
userKey?: UserKey;
|
|
112
164
|
clientKeyAgreementKey: IKeyAgreementKey;
|
|
113
165
|
pinnedEpochId?: string | null;
|
|
114
|
-
onUserKeyAdopted?:
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
166
|
+
onUserKeyAdopted?: UserKeyAdoptedHook;
|
|
167
|
+
collections: CascadeCollections;
|
|
168
|
+
}): Promise<RosterCascadeResult>;
|
|
169
|
+
/**
|
|
170
|
+
* The recipient-naming entry point: retires ONE named roster recipient and
|
|
171
|
+
* runs the collection fan-out, for a ceremony that rotates BEFORE its own
|
|
172
|
+
* document edit (see the module doc). The document handed in still keys the
|
|
173
|
+
* retiring recipient, so the rotation names its kid explicitly; the fresh key
|
|
174
|
+
* is read back through `readBackKeyAgreementKey`, a recipient whose wrap
|
|
175
|
+
* survives the rotation (the standing credential's, on both forgets). No
|
|
176
|
+
* seal backstop runs here.
|
|
177
|
+
*
|
|
178
|
+
* Every stage detects its own completion from durable state: a recipient the
|
|
179
|
+
* current epoch no longer wraps to skips the append (so a re-run of a
|
|
180
|
+
* torn-after-rotation ceremony attempts no second append at the same anchor,
|
|
181
|
+
* which on a ladder-signed roster the one-shot license would refuse), the
|
|
182
|
+
* read-back adopts whatever the roster now delivers, and the fan-out is
|
|
183
|
+
* staleness-driven. An account with no roster yet reports `rotated: false`
|
|
184
|
+
* with an empty fan-out and no key.
|
|
185
|
+
*
|
|
186
|
+
* @param options {object}
|
|
187
|
+
* @param options.rosterStore {EncryptionDescriptorStore} the
|
|
188
|
+
* `key-map/user-key.jsonl` roster store
|
|
189
|
+
* @param options.did {string} the account's did:webvh
|
|
190
|
+
* @param options.doc {DIDDoc} the document the rotation's recipients are
|
|
191
|
+
* resolved from -- the one `log` resolves to
|
|
192
|
+
* @param options.log {DIDLog} the log the rotation anchors at, which the
|
|
193
|
+
* minimum controller version is built from: the pre-edit head for a plain
|
|
194
|
+
* forget, the post-reinstall head for the last-client transition
|
|
195
|
+
* @param options.retireRecipientId {string} the roster kid to retire
|
|
196
|
+
* @param [options.userKey] {UserKey} this client's cached user key
|
|
197
|
+
* @param options.readBackKeyAgreementKey {IKeyAgreementKey} the recipient
|
|
198
|
+
* whose wrap survives the rotation, reading the fresh key back and
|
|
199
|
+
* unwrapping the generations for the fan-out
|
|
200
|
+
* @param [options.pinnedEpochId] {string} the locally pinned latest-seen
|
|
201
|
+
* roster epoch
|
|
202
|
+
* @param [options.onUserKeyAdopted] {UserKeyAdoptedHook} persists a
|
|
203
|
+
* rotated key
|
|
204
|
+
* @param options.collections {CascadeCollections} the fan-out's work
|
|
205
|
+
* @returns {Promise<RosterCascadeResult>} `rotated` says whether THIS run
|
|
206
|
+
* retired the recipient's wrap; `rosterSeal` is never present
|
|
207
|
+
* @throws {UserKeyRosterIntegrityError} the roster's `currentEpoch` names
|
|
208
|
+
* no epoch in its own list
|
|
209
|
+
*/
|
|
210
|
+
export declare function retireRosterRecipientAndCascade({ rosterStore, did, doc, log, retireRecipientId, userKey, readBackKeyAgreementKey, pinnedEpochId, onUserKeyAdopted, collections }: {
|
|
211
|
+
rosterStore: EncryptionDescriptorStore;
|
|
212
|
+
did: string;
|
|
213
|
+
doc: DIDDoc;
|
|
214
|
+
log: DIDLog;
|
|
215
|
+
retireRecipientId: string;
|
|
216
|
+
userKey?: UserKey;
|
|
217
|
+
readBackKeyAgreementKey: IKeyAgreementKey;
|
|
218
|
+
pinnedEpochId?: string | null;
|
|
219
|
+
onUserKeyAdopted?: UserKeyAdoptedHook;
|
|
119
220
|
collections: CascadeCollections;
|
|
120
221
|
}): Promise<RosterCascadeResult>;
|
|
121
222
|
//# sourceMappingURL=userKeyRosterCascade.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userKeyRosterCascade.d.ts","sourceRoot":"","sources":["../../src/keys/userKeyRosterCascade.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"userKeyRosterCascade.d.ts","sourceRoot":"","sources":["../../src/keys/userKeyRosterCascade.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AAExE,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAA;AAQ5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3C;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAA;IACrC,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACnD,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,yBAAyB,CAAA;IAC7D,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACzD;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B,WAAW,EAAE,oBAAoB,CAAA;IACjC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,gBAAgB,CAAC,EAAE,oBAAoB,CAAA;CACxC;AAqBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,WAAW,EACX,GAAG,EACH,GAAG,EACJ,EAAE;IACD,WAAW,EAAE,yBAAyB,CAAA;IACtC,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,IAAI,CAMP;AA6FD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE;IACzC,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,oBAAoB,CAAA;CACjC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAEnB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,gCAAgC,CAAC,EACrD,WAAW,EACX,GAAG,EACH,GAAG,EACH,GAAG,EACH,OAAO,EACP,qBAAqB,EACrB,aAAa,EACb,gBAAgB,EAChB,WAAW,EACZ,EAAE;IACD,WAAW,EAAE,yBAAyB,CAAA;IACtC,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,qBAAqB,EAAE,gBAAgB,CAAA;IACvC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,gBAAgB,CAAC,EAAE,kBAAkB,CAAA;IACrC,WAAW,EAAE,kBAAkB,CAAA;CAChC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA2D/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAsB,+BAA+B,CAAC,EACpD,WAAW,EACX,GAAG,EACH,GAAG,EACH,GAAG,EACH,iBAAiB,EACjB,OAAO,EACP,uBAAuB,EACvB,aAAa,EACb,gBAAgB,EAChB,WAAW,EACZ,EAAE;IACD,WAAW,EAAE,yBAAyB,CAAA;IACtC,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,iBAAiB,EAAE,MAAM,CAAA;IACzB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,uBAAuB,EAAE,gBAAgB,CAAA;IACzC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,gBAAgB,CAAC,EAAE,kBAAkB,CAAA;IACrC,WAAW,EAAE,kBAAkB,CAAA;CAChC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAuC/B"}
|