@interop/was-client 0.17.0 → 0.18.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/dist/Resource.d.ts.map +1 -1
- package/dist/Resource.js +6 -3
- package/dist/Resource.js.map +1 -1
- package/dist/codec.d.ts +15 -2
- package/dist/codec.d.ts.map +1 -1
- package/dist/edv/EdvCodec.d.ts +61 -5
- package/dist/edv/EdvCodec.d.ts.map +1 -1
- package/dist/edv/EdvCodec.js +181 -11
- package/dist/edv/EdvCodec.js.map +1 -1
- package/dist/edv/epochKeys.d.ts.map +1 -1
- package/dist/edv/epochKeys.js +44 -14
- package/dist/edv/epochKeys.js.map +1 -1
- package/dist/edv/epochMac.d.ts +32 -0
- package/dist/edv/epochMac.d.ts.map +1 -0
- package/dist/edv/epochMac.js +117 -0
- package/dist/edv/epochMac.js.map +1 -0
- package/dist/edv/recipients.d.ts.map +1 -1
- package/dist/edv/recipients.js +26 -3
- package/dist/edv/recipients.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/Resource.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Resource.d.ts","sourceRoot":"","sources":["../src/Resource.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAc1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EACV,kBAAkB,EAClB,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,YAAY,CAAA;AAkBnB,qBAAa,QAAQ;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAO;IACpC;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD;;;;;;;;;;;;;;;;OAgBG;gBACS,EACV,OAAO,EACP,OAAO,EACP,YAAY,EACZ,UAAU,EACV,UAAU,EACV,KAAK,EACL,QAAQ,EACR,UAAU,EACX,EAAE;QACD,OAAO,EAAE,aAAa,CAAA;QACtB,OAAO,EAAE,MAAM,CAAA;QACf,YAAY,EAAE,MAAM,CAAA;QACpB,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,CAAC,EAAE,KAAK,CAAA;QAClB,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAA;QACpC,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QAClC,UAAU,CAAC,EAAE,kBAAkB,CAAA;KAChC;IAsCD,OAAO,KAAK,KAAK,GAEhB;IAED;;;;;;OAMG;YACW,KAAK;IASnB;;;;;;OAMG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAMxC;;;;;;;;;;;;;OAaG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASvC;;;;;;;;;;;;;OAaG;IACG,QAAQ,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAW5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,GAAG,CACP,IAAI,EAAE,YAAY,EAClB,OAAO,GAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,WAAW,CAAC,EAAE,OAAO,CAAA;KACjB,GACL,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAkB7B;;;;;;;;OAQG;IACG,MAAM,CAAC,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAY/D,OAAO,KAAK,SAAS,GAEpB;IAED;;;;;;;;;;;;;;;;OAgBG;IACG,IAAI,IAAI,OAAO,CAAC,CAAC,gBAAgB,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IAkCpE;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,OAAO,CACX,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,sBAAsB,CAAA;KAAO,EAC9C,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAO,GACxD,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"Resource.d.ts","sourceRoot":"","sources":["../src/Resource.ts"],"names":[],"mappings":"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"}
|
package/dist/Resource.js
CHANGED
|
@@ -138,7 +138,7 @@ export class Resource {
|
|
|
138
138
|
async get() {
|
|
139
139
|
const codec = await this._codec();
|
|
140
140
|
const response = await this._read();
|
|
141
|
-
return response === null ? null : codec.decode(response);
|
|
141
|
+
return response === null ? null : codec.decode(response, this.id);
|
|
142
142
|
}
|
|
143
143
|
/**
|
|
144
144
|
* Reads the resource body as text. Returns `null` on a missing/unauthorized
|
|
@@ -298,7 +298,7 @@ export class Resource {
|
|
|
298
298
|
const metadata = response.data;
|
|
299
299
|
// Decode the user-writable `custom` (decrypting it on an encrypted
|
|
300
300
|
// collection) so callers uniformly see plaintext `{ name, tags }`.
|
|
301
|
-
const custom = await codec.decodeMeta({ custom: metadata.custom });
|
|
301
|
+
const custom = await codec.decodeMeta({ custom: metadata.custom }, this.id);
|
|
302
302
|
const decoded = { ...metadata, custom };
|
|
303
303
|
const etag = readEtag(response);
|
|
304
304
|
return etag !== undefined ? { ...decoded, etag } : decoded;
|
|
@@ -331,7 +331,10 @@ export class Resource {
|
|
|
331
331
|
*/
|
|
332
332
|
async setMeta(meta = {}, options = {}) {
|
|
333
333
|
const codec = await this._codec();
|
|
334
|
-
const { custom } = await codec.encodeMeta({
|
|
334
|
+
const { custom } = await codec.encodeMeta({
|
|
335
|
+
custom: meta.custom ?? {},
|
|
336
|
+
id: this.id
|
|
337
|
+
});
|
|
335
338
|
const response = await send(this._context, {
|
|
336
339
|
path: this._metaPath,
|
|
337
340
|
method: 'PUT',
|
package/dist/Resource.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Resource.js","sourceRoot":"","sources":["../src/Resource.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Resource.js","sourceRoot":"","sources":["../src/Resource.ts"],"names":[],"mappings":"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"}
|
package/dist/codec.d.ts
CHANGED
|
@@ -113,9 +113,14 @@ export interface ResourceCodec {
|
|
|
113
113
|
* codec encrypts.
|
|
114
114
|
*
|
|
115
115
|
* @param response {HttpResponse}
|
|
116
|
+
* @param [expectedId] {string} the resource id the read targeted. An
|
|
117
|
+
* encrypting codec verifies the decrypted envelope's AEAD-authenticated
|
|
118
|
+
* binding against it (a server-side swap of two envelopes is then detected);
|
|
119
|
+
* the identity codec ignores it. Optional and backward compatible -- a
|
|
120
|
+
* caller that does not know the id (or the plaintext codec) omits it.
|
|
116
121
|
* @returns {Promise<Json | Blob>}
|
|
117
122
|
*/
|
|
118
|
-
decode(response: HttpResponse): Promise<Json | Blob>;
|
|
123
|
+
decode(response: HttpResponse, expectedId?: string): Promise<Json | Blob>;
|
|
119
124
|
/**
|
|
120
125
|
* Transforms a caller's user-writable metadata (`custom`) into the value to
|
|
121
126
|
* store under `custom` on a `PUT .../meta` write. The identity codec returns
|
|
@@ -125,10 +130,15 @@ export interface ResourceCodec {
|
|
|
125
130
|
*
|
|
126
131
|
* @param input {object}
|
|
127
132
|
* @param input.custom {ResourceMetadataCustom} the plaintext user metadata
|
|
133
|
+
* @param [input.id] {string} the resource id the metadata belongs to. An
|
|
134
|
+
* encrypting codec binds it into the metadata envelope's AEAD-authenticated
|
|
135
|
+
* protected header (so a server-side swap of two resources' metadata is
|
|
136
|
+
* detected on decode); the identity codec ignores it.
|
|
128
137
|
* @returns {Promise<{ custom: object }>} the value to store under `custom`
|
|
129
138
|
*/
|
|
130
139
|
encodeMeta(input: {
|
|
131
140
|
custom: ResourceMetadataCustom;
|
|
141
|
+
id?: string;
|
|
132
142
|
}): Promise<{
|
|
133
143
|
custom: object;
|
|
134
144
|
}>;
|
|
@@ -140,11 +150,14 @@ export interface ResourceCodec {
|
|
|
140
150
|
*
|
|
141
151
|
* @param stored {object}
|
|
142
152
|
* @param [stored.custom] {unknown} the stored `custom` value from `/meta`
|
|
153
|
+
* @param [expectedId] {string} the resource id the metadata belongs to. An
|
|
154
|
+
* encrypting codec verifies the envelope's AEAD-authenticated binding
|
|
155
|
+
* against it; the identity codec ignores it.
|
|
143
156
|
* @returns {Promise<ResourceMetadataCustom>}
|
|
144
157
|
*/
|
|
145
158
|
decodeMeta(stored: {
|
|
146
159
|
custom?: unknown;
|
|
147
|
-
}): Promise<ResourceMetadataCustom>;
|
|
160
|
+
}, expectedId?: string): Promise<ResourceMetadataCustom>;
|
|
148
161
|
}
|
|
149
162
|
/**
|
|
150
163
|
* The keystore + codec factory for encrypted collections. Injected into
|
package/dist/codec.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EACV,oBAAoB,EACpB,IAAI,EACJ,YAAY,EACZ,sBAAsB,EACvB,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;;;OAQG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAEpC;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,KAAK,EAAE;QACZ,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,YAAY,CAAA;QAClB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;KAC9B,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAEzB
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EACV,oBAAoB,EACpB,IAAI,EACJ,YAAY,EACZ,sBAAsB,EACvB,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;;;OAQG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAEpC;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,KAAK,EAAE;QACZ,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,YAAY,CAAA;QAClB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;KAC9B,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAEzB;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IAEzE;;;;;;;;;;;;;;OAcG;IACH,UAAU,CAAC,KAAK,EAAE;QAChB,MAAM,EAAE,sBAAsB,CAAA;QAC9B,EAAE,CAAC,EAAE,MAAM,CAAA;KACZ,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAE/B;;;;;;;;;;;;OAYG;IACH,UAAU,CACR,MAAM,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,EAC5B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,sBAAsB,CAAC,CAAA;CACnC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,CAAC,KAAK,EAAE;QACd,OAAO,EAAE,MAAM,CAAA;QACf,YAAY,EAAE,MAAM,CAAA;QACpB,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,CAAC,EAAE,oBAAoB,CAAA;QACjC,IAAI,CAAC,EAAE,OAAO,CAAA;KACf,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;CAClC"}
|
package/dist/edv/EdvCodec.d.ts
CHANGED
|
@@ -24,6 +24,18 @@ export declare class EdvCodec implements ResourceCodec {
|
|
|
24
24
|
private readonly _contentType;
|
|
25
25
|
private readonly _maxBlobBytes;
|
|
26
26
|
private readonly _idDerivation;
|
|
27
|
+
/**
|
|
28
|
+
* The EDV-over-WAS scheme version this codec binds into every envelope's
|
|
29
|
+
* `was.v` protected-header parameter (the marker's `version`, `1` when
|
|
30
|
+
* absent). Read side rejects an envelope stamped with a greater version.
|
|
31
|
+
*/
|
|
32
|
+
private readonly _version;
|
|
33
|
+
/**
|
|
34
|
+
* Whether this codec's collection has key epochs. When it does, an envelope's
|
|
35
|
+
* `was.epoch` binding is checked on decode against the epoch of the key that
|
|
36
|
+
* actually decrypted it.
|
|
37
|
+
*/
|
|
38
|
+
private readonly _hasEpochs;
|
|
27
39
|
/**
|
|
28
40
|
* @param options {object}
|
|
29
41
|
* @param options.edv {EdvClientCore} holds the cipher + key resolver
|
|
@@ -44,8 +56,13 @@ export declare class EdvCodec implements ResourceCodec {
|
|
|
44
56
|
* @param options.idDerivation {string} how `add()` mints a document
|
|
45
57
|
* id: `'random'` (classic `generateId()`) or `'content'` (derived from the
|
|
46
58
|
* JWE ciphertext, content-addressed)
|
|
59
|
+
* @param [options.version] {number} the EDV-over-WAS scheme version to bind
|
|
60
|
+
* into each envelope's `was.v` (defaults to `1`)
|
|
61
|
+
* @param [options.hasEpochs] {boolean} whether the collection has key
|
|
62
|
+
* epochs, so a decoded envelope's `was.epoch` binding is checked against the
|
|
63
|
+
* decrypting key's epoch (defaults to `false`)
|
|
47
64
|
*/
|
|
48
|
-
constructor({ edv, keyAgreementKey, readKeys, writeEpoch, contentType, maxBlobBytes, idDerivation }: {
|
|
65
|
+
constructor({ edv, keyAgreementKey, readKeys, writeEpoch, contentType, maxBlobBytes, idDerivation, version, hasEpochs }: {
|
|
49
66
|
edv: EdvClientCore;
|
|
50
67
|
keyAgreementKey: IKeyAgreementKey;
|
|
51
68
|
readKeys?: IKeyAgreementKey[];
|
|
@@ -53,6 +70,8 @@ export declare class EdvCodec implements ResourceCodec {
|
|
|
53
70
|
contentType: string;
|
|
54
71
|
maxBlobBytes: number;
|
|
55
72
|
idDerivation: 'random' | 'content';
|
|
73
|
+
version?: number;
|
|
74
|
+
hasEpochs?: boolean;
|
|
56
75
|
});
|
|
57
76
|
/**
|
|
58
77
|
* @inheritdoc
|
|
@@ -69,7 +88,7 @@ export declare class EdvCodec implements ResourceCodec {
|
|
|
69
88
|
decode(response: {
|
|
70
89
|
data?: unknown;
|
|
71
90
|
json(): Promise<unknown>;
|
|
72
|
-
}): Promise<Json | Blob>;
|
|
91
|
+
}, expectedId?: string): Promise<Json | Blob>;
|
|
73
92
|
/**
|
|
74
93
|
* Decrypts a stored EDV envelope, selecting which read key to use by matching
|
|
75
94
|
* the envelope's JWE recipient `kid` against this reader's candidate keys
|
|
@@ -82,10 +101,46 @@ export declare class EdvCodec implements ResourceCodec {
|
|
|
82
101
|
* {@link KeyUnwrapError} -- the **read** axis only; it says nothing about
|
|
83
102
|
* whether the server will still serve (pull) the ciphertext.
|
|
84
103
|
*
|
|
104
|
+
* Also returns the `id` of the key that actually decrypted the envelope (its
|
|
105
|
+
* JWE recipient `kid`), so {@link _verifyBinding} can check a `was.epoch`
|
|
106
|
+
* binding against the epoch of the decrypting key.
|
|
107
|
+
*
|
|
85
108
|
* @param encryptedDoc {IEncryptedDocument}
|
|
86
|
-
* @returns {Promise<{ content?: unknown; meta?: Record<string, unknown
|
|
109
|
+
* @returns {Promise<{ content?: unknown; meta?: Record<string, unknown>;
|
|
110
|
+
* keyId?: string }>}
|
|
87
111
|
*/
|
|
88
112
|
private _decrypt;
|
|
113
|
+
/**
|
|
114
|
+
* Verifies the AEAD-authenticated `was` binding on a successfully-decrypted
|
|
115
|
+
* envelope (spec "Request Body Integrity"'s envelope half). Decrypt success
|
|
116
|
+
* proves the protected header authentic, so this runs only after a decrypt
|
|
117
|
+
* succeeds. Enforces, in order:
|
|
118
|
+
*
|
|
119
|
+
* - No `was` parameter at all: a legacy envelope, accepted unchanged (this
|
|
120
|
+
* client wrote it before the binding existed, or a foreign EDV writer did).
|
|
121
|
+
* - `was.v` greater than this codec's scheme version: a future-scheme envelope
|
|
122
|
+
* this client does not implement -- {@link EncryptionError}.
|
|
123
|
+
* - `was.resource` present and the expected id known: a mismatch is a server-side
|
|
124
|
+
* swap of two resources' envelopes -- {@link IntegrityError}.
|
|
125
|
+
* - `was` present but `resource` absent (a content-derived write) and the expected
|
|
126
|
+
* id known: the envelope's ciphertext must re-derive to the expected id
|
|
127
|
+
* ({@link EdvDocumentCipher.deriveId}); a mismatch means the envelope was
|
|
128
|
+
* copied under a different id -- {@link IntegrityError}. This check is NEVER
|
|
129
|
+
* applied to an envelope with no `was` at all (a legacy random-id envelope
|
|
130
|
+
* would fail it wrongly).
|
|
131
|
+
* - On a collection with epochs, `was.epoch` present: it must equal the epoch
|
|
132
|
+
* (the `did:key` before the `#`) of the key that actually decrypted -- a
|
|
133
|
+
* mismatch is a replay under a different epoch's key -- {@link IntegrityError}.
|
|
134
|
+
*
|
|
135
|
+
* @param options {object}
|
|
136
|
+
* @param options.jwe {unknown} the envelope's JWE (its `protected` header is
|
|
137
|
+
* parsed for `was`)
|
|
138
|
+
* @param [options.expectedId] {string} the resource id the read targeted
|
|
139
|
+
* @param [options.keyId] {string} the id of the key that decrypted, for the
|
|
140
|
+
* epoch check
|
|
141
|
+
* @returns {Promise<void>}
|
|
142
|
+
*/
|
|
143
|
+
private _verifyBinding;
|
|
89
144
|
/**
|
|
90
145
|
* @inheritdoc
|
|
91
146
|
*
|
|
@@ -95,8 +150,9 @@ export declare class EdvCodec implements ResourceCodec {
|
|
|
95
150
|
* inert (metadata concurrency is the server's plaintext `metaVersion`, not the
|
|
96
151
|
* envelope), so each write re-encrypts fresh with no `update`.
|
|
97
152
|
*/
|
|
98
|
-
encodeMeta({ custom }: {
|
|
153
|
+
encodeMeta({ custom, id: resourceId }: {
|
|
99
154
|
custom: ResourceMetadataCustom;
|
|
155
|
+
id?: string;
|
|
100
156
|
}): Promise<{
|
|
101
157
|
custom: object;
|
|
102
158
|
}>;
|
|
@@ -110,7 +166,7 @@ export declare class EdvCodec implements ResourceCodec {
|
|
|
110
166
|
*/
|
|
111
167
|
decodeMeta({ custom }: {
|
|
112
168
|
custom?: unknown;
|
|
113
|
-
}): Promise<ResourceMetadataCustom>;
|
|
169
|
+
}, expectedId?: string): Promise<ResourceMetadataCustom>;
|
|
114
170
|
/**
|
|
115
171
|
* Asserts that a document read from an encrypted collection is an EDV envelope
|
|
116
172
|
* (`{ jwe, ... }`) before it is handed to the cipher. A plaintext or foreign
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EdvCodec.d.ts","sourceRoot":"","sources":["../../src/edv/EdvCodec.ts"],"names":[],"mappings":"AAuDA,OAAO,EAAE,aAAa,EAAe,MAAM,qBAAqB,CAAA;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EAEV,gBAAgB,EAChB,YAAY,EAEb,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACd,MAAM,aAAa,CAAA;AAiBpB,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAyD7E;;;;GAIG;AACH,qBAAa,QAAS,YAAW,aAAa;IAC5C,QAAQ,CAAC,iBAAiB,QAAO;IAEjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;
|
|
1
|
+
{"version":3,"file":"EdvCodec.d.ts","sourceRoot":"","sources":["../../src/edv/EdvCodec.ts"],"names":[],"mappings":"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"}
|
package/dist/edv/EdvCodec.js
CHANGED
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
* plaintext `name`/`tags`. A reader with the keys decrypts it back
|
|
53
53
|
* transparently via `meta()`.
|
|
54
54
|
*/
|
|
55
|
-
import { base64 } from '@scure/base';
|
|
55
|
+
import { base64, base64urlnopad } from '@scure/base';
|
|
56
56
|
import { EdvClientCore, assertDocId } from '@interop/edv-client';
|
|
57
57
|
import { EncryptionError, IntegrityError, KeyUnwrapError, ValidationError } from '../errors.js';
|
|
58
58
|
import { readEtag } from '../internal/conditional.js';
|
|
@@ -130,6 +130,18 @@ export class EdvCodec {
|
|
|
130
130
|
_contentType;
|
|
131
131
|
_maxBlobBytes;
|
|
132
132
|
_idDerivation;
|
|
133
|
+
/**
|
|
134
|
+
* The EDV-over-WAS scheme version this codec binds into every envelope's
|
|
135
|
+
* `was.v` protected-header parameter (the marker's `version`, `1` when
|
|
136
|
+
* absent). Read side rejects an envelope stamped with a greater version.
|
|
137
|
+
*/
|
|
138
|
+
_version;
|
|
139
|
+
/**
|
|
140
|
+
* Whether this codec's collection has key epochs. When it does, an envelope's
|
|
141
|
+
* `was.epoch` binding is checked on decode against the epoch of the key that
|
|
142
|
+
* actually decrypted it.
|
|
143
|
+
*/
|
|
144
|
+
_hasEpochs;
|
|
133
145
|
/**
|
|
134
146
|
* @param options {object}
|
|
135
147
|
* @param options.edv {EdvClientCore} holds the cipher + key resolver
|
|
@@ -150,8 +162,13 @@ export class EdvCodec {
|
|
|
150
162
|
* @param options.idDerivation {string} how `add()` mints a document
|
|
151
163
|
* id: `'random'` (classic `generateId()`) or `'content'` (derived from the
|
|
152
164
|
* JWE ciphertext, content-addressed)
|
|
165
|
+
* @param [options.version] {number} the EDV-over-WAS scheme version to bind
|
|
166
|
+
* into each envelope's `was.v` (defaults to `1`)
|
|
167
|
+
* @param [options.hasEpochs] {boolean} whether the collection has key
|
|
168
|
+
* epochs, so a decoded envelope's `was.epoch` binding is checked against the
|
|
169
|
+
* decrypting key's epoch (defaults to `false`)
|
|
153
170
|
*/
|
|
154
|
-
constructor({ edv, keyAgreementKey, readKeys, writeEpoch, contentType, maxBlobBytes, idDerivation }) {
|
|
171
|
+
constructor({ edv, keyAgreementKey, readKeys, writeEpoch, contentType, maxBlobBytes, idDerivation, version, hasEpochs }) {
|
|
155
172
|
this._edv = edv;
|
|
156
173
|
this._writeKey = keyAgreementKey;
|
|
157
174
|
this._recipients =
|
|
@@ -161,6 +178,8 @@ export class EdvCodec {
|
|
|
161
178
|
this._contentType = contentType;
|
|
162
179
|
this._maxBlobBytes = maxBlobBytes;
|
|
163
180
|
this._idDerivation = idDerivation;
|
|
181
|
+
this._version = version ?? 1;
|
|
182
|
+
this._hasEpochs = hasEpochs ?? false;
|
|
164
183
|
}
|
|
165
184
|
/**
|
|
166
185
|
* @inheritdoc
|
|
@@ -200,6 +219,21 @@ export class EdvCodec {
|
|
|
200
219
|
priorDoc = read;
|
|
201
220
|
}
|
|
202
221
|
const { documentCipher } = this._edv;
|
|
222
|
+
// Bind an AEAD-authenticated `was` parameter into the JWE protected header:
|
|
223
|
+
// the scheme version, the resource id when known at encrypt time (omitted
|
|
224
|
+
// for a content-derived id, which does not exist until after encryption),
|
|
225
|
+
// and the write epoch on a multi-recipient collection. A server that swaps
|
|
226
|
+
// two envelopes between ids (or replays one under a rolled-back epoch) is
|
|
227
|
+
// then detected on decrypt.
|
|
228
|
+
const was = {
|
|
229
|
+
v: this._version
|
|
230
|
+
};
|
|
231
|
+
if (docId !== undefined) {
|
|
232
|
+
was.resource = docId;
|
|
233
|
+
}
|
|
234
|
+
if (this._writeEpoch !== undefined) {
|
|
235
|
+
was.epoch = this._writeEpoch;
|
|
236
|
+
}
|
|
203
237
|
const encrypted = await documentCipher.encrypt({
|
|
204
238
|
doc: {
|
|
205
239
|
...(docId !== undefined && { id: docId }),
|
|
@@ -213,7 +247,8 @@ export class EdvCodec {
|
|
|
213
247
|
recipients: this._recipients,
|
|
214
248
|
keyResolver: this._edv.keyResolver,
|
|
215
249
|
hmac: undefined,
|
|
216
|
-
update: priorDoc !== null
|
|
250
|
+
update: priorDoc !== null,
|
|
251
|
+
additionalProtectedParams: { was }
|
|
217
252
|
});
|
|
218
253
|
if (docId === undefined) {
|
|
219
254
|
// Encrypt-then-stamp: the id lives in the cleartext envelope, outside the
|
|
@@ -251,10 +286,15 @@ export class EdvCodec {
|
|
|
251
286
|
/**
|
|
252
287
|
* @inheritdoc
|
|
253
288
|
*/
|
|
254
|
-
async decode(response) {
|
|
289
|
+
async decode(response, expectedId) {
|
|
255
290
|
const encryptedDoc = await readJsonData(response);
|
|
256
291
|
this._assertEnvelope(encryptedDoc, 'read');
|
|
257
292
|
const decrypted = await this._decrypt(encryptedDoc);
|
|
293
|
+
await this._verifyBinding({
|
|
294
|
+
jwe: encryptedDoc.jwe,
|
|
295
|
+
expectedId,
|
|
296
|
+
keyId: decrypted.keyId
|
|
297
|
+
});
|
|
258
298
|
return this._fromDocument(decrypted.content, decrypted.meta);
|
|
259
299
|
}
|
|
260
300
|
/**
|
|
@@ -269,8 +309,13 @@ export class EdvCodec {
|
|
|
269
309
|
* {@link KeyUnwrapError} -- the **read** axis only; it says nothing about
|
|
270
310
|
* whether the server will still serve (pull) the ciphertext.
|
|
271
311
|
*
|
|
312
|
+
* Also returns the `id` of the key that actually decrypted the envelope (its
|
|
313
|
+
* JWE recipient `kid`), so {@link _verifyBinding} can check a `was.epoch`
|
|
314
|
+
* binding against the epoch of the decrypting key.
|
|
315
|
+
*
|
|
272
316
|
* @param encryptedDoc {IEncryptedDocument}
|
|
273
|
-
* @returns {Promise<{ content?: unknown; meta?: Record<string, unknown
|
|
317
|
+
* @returns {Promise<{ content?: unknown; meta?: Record<string, unknown>;
|
|
318
|
+
* keyId?: string }>}
|
|
274
319
|
*/
|
|
275
320
|
async _decrypt(encryptedDoc) {
|
|
276
321
|
const recipients = encryptedDoc.jwe.recipients ?? [];
|
|
@@ -288,10 +333,11 @@ export class EdvCodec {
|
|
|
288
333
|
const rest = this._readKeys.filter(key => !kids.has(key.id));
|
|
289
334
|
for (const keyAgreementKey of [...preferred, ...rest]) {
|
|
290
335
|
try {
|
|
291
|
-
|
|
336
|
+
const decrypted = await this._edv.documentCipher.decrypt({
|
|
292
337
|
encryptedDoc,
|
|
293
338
|
keyAgreementKey
|
|
294
339
|
});
|
|
340
|
+
return { ...decrypted, keyId: keyAgreementKey.id };
|
|
295
341
|
}
|
|
296
342
|
catch (err) {
|
|
297
343
|
if (isKeyMiss(err)) {
|
|
@@ -318,6 +364,76 @@ export class EdvCodec {
|
|
|
318
364
|
'collection and the epoch was rotated). This is the read axis only -- ' +
|
|
319
365
|
'the server may still serve the ciphertext (a separate zcap decision).');
|
|
320
366
|
}
|
|
367
|
+
/**
|
|
368
|
+
* Verifies the AEAD-authenticated `was` binding on a successfully-decrypted
|
|
369
|
+
* envelope (spec "Request Body Integrity"'s envelope half). Decrypt success
|
|
370
|
+
* proves the protected header authentic, so this runs only after a decrypt
|
|
371
|
+
* succeeds. Enforces, in order:
|
|
372
|
+
*
|
|
373
|
+
* - No `was` parameter at all: a legacy envelope, accepted unchanged (this
|
|
374
|
+
* client wrote it before the binding existed, or a foreign EDV writer did).
|
|
375
|
+
* - `was.v` greater than this codec's scheme version: a future-scheme envelope
|
|
376
|
+
* this client does not implement -- {@link EncryptionError}.
|
|
377
|
+
* - `was.resource` present and the expected id known: a mismatch is a server-side
|
|
378
|
+
* swap of two resources' envelopes -- {@link IntegrityError}.
|
|
379
|
+
* - `was` present but `resource` absent (a content-derived write) and the expected
|
|
380
|
+
* id known: the envelope's ciphertext must re-derive to the expected id
|
|
381
|
+
* ({@link EdvDocumentCipher.deriveId}); a mismatch means the envelope was
|
|
382
|
+
* copied under a different id -- {@link IntegrityError}. This check is NEVER
|
|
383
|
+
* applied to an envelope with no `was` at all (a legacy random-id envelope
|
|
384
|
+
* would fail it wrongly).
|
|
385
|
+
* - On a collection with epochs, `was.epoch` present: it must equal the epoch
|
|
386
|
+
* (the `did:key` before the `#`) of the key that actually decrypted -- a
|
|
387
|
+
* mismatch is a replay under a different epoch's key -- {@link IntegrityError}.
|
|
388
|
+
*
|
|
389
|
+
* @param options {object}
|
|
390
|
+
* @param options.jwe {unknown} the envelope's JWE (its `protected` header is
|
|
391
|
+
* parsed for `was`)
|
|
392
|
+
* @param [options.expectedId] {string} the resource id the read targeted
|
|
393
|
+
* @param [options.keyId] {string} the id of the key that decrypted, for the
|
|
394
|
+
* epoch check
|
|
395
|
+
* @returns {Promise<void>}
|
|
396
|
+
*/
|
|
397
|
+
async _verifyBinding({ jwe, expectedId, keyId }) {
|
|
398
|
+
const was = parseWasHeader(jwe);
|
|
399
|
+
if (was === undefined) {
|
|
400
|
+
// Legacy envelope (no `was`): accept unchanged for back-compat.
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
if (typeof was.v === 'number' && was.v > this._version) {
|
|
404
|
+
throw new EncryptionError(`Cannot decrypt this resource: its envelope is stamped with ` +
|
|
405
|
+
`EDV-over-WAS scheme version ${was.v}, which this client (version ` +
|
|
406
|
+
`${this._version}) does not implement. Upgrade the client.`);
|
|
407
|
+
}
|
|
408
|
+
if (typeof was.resource === 'string') {
|
|
409
|
+
if (expectedId !== undefined && was.resource !== expectedId) {
|
|
410
|
+
throw new IntegrityError(`Cannot decrypt this resource: the stored envelope is bound to a ` +
|
|
411
|
+
`different resource id ("${was.resource}") than the one requested ` +
|
|
412
|
+
`("${expectedId}"). The server swapped two resources' envelopes.`);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
else if (expectedId !== undefined) {
|
|
416
|
+
// Content-derived write (no `resource`): the id is a function of the
|
|
417
|
+
// ciphertext, so re-derive and compare.
|
|
418
|
+
const derived = await this._edv.documentCipher.deriveId({
|
|
419
|
+
jwe: jwe
|
|
420
|
+
});
|
|
421
|
+
if (derived !== expectedId) {
|
|
422
|
+
throw new IntegrityError(`Cannot decrypt this resource: its content-derived id ("${derived}") ` +
|
|
423
|
+
`does not match the requested id ("${expectedId}"). The server ` +
|
|
424
|
+
'served this envelope under an id it was not written for.');
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
if (this._hasEpochs && typeof was.epoch === 'string' && keyId) {
|
|
428
|
+
const decryptedEpoch = keyId.split('#')[0];
|
|
429
|
+
if (decryptedEpoch !== was.epoch) {
|
|
430
|
+
throw new IntegrityError(`Cannot decrypt this resource: its envelope is bound to key epoch ` +
|
|
431
|
+
`"${was.epoch}" but was decrypted with a key from epoch ` +
|
|
432
|
+
`"${decryptedEpoch}". The server replayed it under a different ` +
|
|
433
|
+
'epoch.');
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
321
437
|
/**
|
|
322
438
|
* @inheritdoc
|
|
323
439
|
*
|
|
@@ -327,18 +443,28 @@ export class EdvCodec {
|
|
|
327
443
|
* inert (metadata concurrency is the server's plaintext `metaVersion`, not the
|
|
328
444
|
* envelope), so each write re-encrypts fresh with no `update`.
|
|
329
445
|
*/
|
|
330
|
-
async encodeMeta({ custom }) {
|
|
446
|
+
async encodeMeta({ custom, id: resourceId }) {
|
|
331
447
|
const { documentCipher } = this._edv;
|
|
332
448
|
// The document needs an EDV id (the cipher asserts one on decrypt). It is
|
|
333
449
|
// opaque to the server -- carried inside the un-decryptable envelope -- and
|
|
334
450
|
// minted fresh each write, since the metadata envelope is never updated in
|
|
335
451
|
// place (concurrency is the server's plaintext `metaVersion`, Decision 3).
|
|
336
452
|
const id = (await this._edv.generateId());
|
|
453
|
+
// Bind the `was` parameter to the RESOURCE id (not the metadata envelope's
|
|
454
|
+
// own random EDV id), so a server-side swap of two resources' metadata is
|
|
455
|
+
// AEAD-detected on decode. The metadata envelope always knows the resource
|
|
456
|
+
// id at encrypt time, so `resource` is always present here (never content-
|
|
457
|
+
// derived) and it carries no `epoch`.
|
|
458
|
+
const was = { v: this._version };
|
|
459
|
+
if (resourceId !== undefined) {
|
|
460
|
+
was.resource = resourceId;
|
|
461
|
+
}
|
|
337
462
|
const encrypted = await documentCipher.encrypt({
|
|
338
463
|
doc: { id, content: custom },
|
|
339
464
|
recipients: this._recipients,
|
|
340
465
|
keyResolver: this._edv.keyResolver,
|
|
341
|
-
hmac: undefined
|
|
466
|
+
hmac: undefined,
|
|
467
|
+
additionalProtectedParams: { was }
|
|
342
468
|
});
|
|
343
469
|
return { custom: encrypted };
|
|
344
470
|
}
|
|
@@ -350,12 +476,18 @@ export class EdvCodec {
|
|
|
350
476
|
* present value must be an EDV envelope (else {@link EncryptionError}, the
|
|
351
477
|
* `_assertEnvelope` guard), so a foreign plaintext `custom` fails closed.
|
|
352
478
|
*/
|
|
353
|
-
async decodeMeta({ custom }) {
|
|
479
|
+
async decodeMeta({ custom }, expectedId) {
|
|
354
480
|
if (custom === undefined || custom === null) {
|
|
355
481
|
return {};
|
|
356
482
|
}
|
|
357
483
|
this._assertEnvelope(custom, 'read');
|
|
358
|
-
const
|
|
484
|
+
const encryptedDoc = custom;
|
|
485
|
+
const decrypted = await this._decrypt(encryptedDoc);
|
|
486
|
+
await this._verifyBinding({
|
|
487
|
+
jwe: encryptedDoc.jwe,
|
|
488
|
+
expectedId,
|
|
489
|
+
keyId: decrypted.keyId
|
|
490
|
+
});
|
|
359
491
|
return (decrypted.content ?? {});
|
|
360
492
|
}
|
|
361
493
|
/**
|
|
@@ -522,6 +654,34 @@ function decodeUtf8(bytes) {
|
|
|
522
654
|
return null;
|
|
523
655
|
}
|
|
524
656
|
}
|
|
657
|
+
/**
|
|
658
|
+
* Parses the `was` binding out of a JWE's protected header. The header is
|
|
659
|
+
* base64url (no padding) JSON; a successful decrypt has already proven it
|
|
660
|
+
* authentic, so this parse is trusted. Returns the `was` object, or `undefined`
|
|
661
|
+
* when the header is absent/unparseable or carries no `was` member (a legacy
|
|
662
|
+
* envelope that predates the binding).
|
|
663
|
+
*
|
|
664
|
+
* @param jwe {unknown}
|
|
665
|
+
* @returns {Record<string, unknown> | undefined}
|
|
666
|
+
*/
|
|
667
|
+
function parseWasHeader(jwe) {
|
|
668
|
+
const protectedHeader = jwe?.protected;
|
|
669
|
+
if (typeof protectedHeader !== 'string') {
|
|
670
|
+
return undefined;
|
|
671
|
+
}
|
|
672
|
+
let parsed;
|
|
673
|
+
try {
|
|
674
|
+
parsed = JSON.parse(new TextDecoder().decode(base64urlnopad.decode(protectedHeader)));
|
|
675
|
+
}
|
|
676
|
+
catch {
|
|
677
|
+
return undefined;
|
|
678
|
+
}
|
|
679
|
+
const was = parsed?.was;
|
|
680
|
+
if (was === null || typeof was !== 'object') {
|
|
681
|
+
return undefined;
|
|
682
|
+
}
|
|
683
|
+
return was;
|
|
684
|
+
}
|
|
525
685
|
/**
|
|
526
686
|
* The EDV scheme tag this provider handles (matches the Collection marker).
|
|
527
687
|
*/
|
|
@@ -569,6 +729,14 @@ export function createEdvEncryption({ resolveKeys, contentType = DEFAULT_CONTENT
|
|
|
569
729
|
if (scheme !== EDV_SCHEME) {
|
|
570
730
|
return null;
|
|
571
731
|
}
|
|
732
|
+
// Refuse a marker from a future scheme version: this client does not
|
|
733
|
+
// implement it, and silently operating on it could mis-handle the data.
|
|
734
|
+
const markerVersion = encryption?.version;
|
|
735
|
+
if (typeof markerVersion === 'number' && markerVersion > 1) {
|
|
736
|
+
throw new EncryptionError(`Collection ${spaceId}/${collectionId} declares EDV-over-WAS scheme ` +
|
|
737
|
+
`version ${markerVersion}, which this client (version 1) does not ` +
|
|
738
|
+
'implement. Upgrade the client.');
|
|
739
|
+
}
|
|
572
740
|
// Prefer override-supplied keys; otherwise consult the keystore.
|
|
573
741
|
const resolved = keys ??
|
|
574
742
|
(await resolveKeys({ spaceId, collectionId }));
|
|
@@ -609,7 +777,9 @@ export function createEdvEncryption({ resolveKeys, contentType = DEFAULT_CONTENT
|
|
|
609
777
|
writeEpoch,
|
|
610
778
|
contentType,
|
|
611
779
|
maxBlobBytes,
|
|
612
|
-
idDerivation
|
|
780
|
+
idDerivation,
|
|
781
|
+
version: markerVersion ?? 1,
|
|
782
|
+
hasEpochs: !!(encryption?.epochs && encryption.epochs.length > 0)
|
|
613
783
|
});
|
|
614
784
|
}
|
|
615
785
|
};
|
package/dist/edv/EdvCodec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EdvCodec.js","sourceRoot":"","sources":["../../src/edv/EdvCodec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EdvCodec.js","sourceRoot":"","sources":["../../src/edv/EdvCodec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epochKeys.d.ts","sourceRoot":"","sources":["../../src/edv/epochKeys.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAEpE,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"epochKeys.d.ts","sourceRoot":"","sources":["../../src/edv/epochKeys.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAEpE,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,aAAa,CAAA;AAQpB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,QAAQ,EAAE,gBAAgB,CAAA;IAC1B;;;;OAIG;IACH,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAC7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,UAAU,EACV,eAAe,EAChB,EAAE;IACD,UAAU,EAAE,oBAAoB,CAAA;IAChC,eAAe,EAAE,gBAAgB,CAAA;CAClC,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CA+FpC"}
|
package/dist/edv/epochKeys.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { KeyUnwrapError } from '../errors.js';
|
|
1
|
+
import { IntegrityError, KeyUnwrapError } from '../errors.js';
|
|
2
2
|
import { epochKeyIdFor, reconstructEpochKeyPair, unwrapEpochSecret } from './epochCrypto.js';
|
|
3
|
+
import { verifyEpochsMac } from './epochMac.js';
|
|
3
4
|
/**
|
|
4
5
|
* Resolves the reader's epoch keys from a marker. Returns `null` when the marker
|
|
5
6
|
* declares no epochs (a single-key collection -- the caller keeps its existing
|
|
@@ -42,17 +43,43 @@ export async function resolveEpochKeys({ encryption, keyAgreementKey }) {
|
|
|
42
43
|
namedEpochs.find(epoch => epoch.id === currentEpoch)) ||
|
|
43
44
|
namedEpochs[namedEpochs.length - 1];
|
|
44
45
|
// The write epoch is unwrapped eagerly: `writeKey` must be a full key pair the
|
|
45
|
-
// EDV cipher can name recipients with and encrypt under right away.
|
|
46
|
-
|
|
46
|
+
// EDV cipher can name recipients with and encrypt under right away. Its raw
|
|
47
|
+
// secret is surfaced alongside so the epoch-configuration MAC can be verified.
|
|
48
|
+
const writeUnwrapped = await unwrapEpochKey({
|
|
47
49
|
epoch: writeEpochEntry,
|
|
48
50
|
keyAgreementKey
|
|
49
51
|
});
|
|
50
|
-
if (!
|
|
52
|
+
if (!writeUnwrapped) {
|
|
51
53
|
throw new KeyUnwrapError(`This reader's recipient entry for the write epoch ` +
|
|
52
54
|
`"${writeEpochEntry.id}" did not unwrap (a corrupt entry). Re-add ` +
|
|
53
55
|
'this reader with addRecipient, or supply the correct key-agreement ' +
|
|
54
56
|
'key.');
|
|
55
57
|
}
|
|
58
|
+
const writeKey = writeUnwrapped.key;
|
|
59
|
+
// Authenticate the epoch configuration when this reader holds the marker's
|
|
60
|
+
// `currentEpoch` (its write epoch IS `currentEpoch`) and the marker carries a
|
|
61
|
+
// MAC. A reader whose write epoch is an older held epoch cannot key the MAC
|
|
62
|
+
// (its secret is not the current epoch's), so it skips verification -- its
|
|
63
|
+
// writes are rejected server-side via its revoked zcap anyway. An absent MAC
|
|
64
|
+
// is a legacy marker, accepted.
|
|
65
|
+
if (writeEpochEntry.id === encryption.currentEpoch &&
|
|
66
|
+
encryption.epochsMac !== undefined) {
|
|
67
|
+
const { v, alg } = encryption.epochsMac;
|
|
68
|
+
if (v !== 1 || alg !== 'HS256') {
|
|
69
|
+
throw new IntegrityError('The epoch configuration failed to authenticate: its MAC declares an ' +
|
|
70
|
+
`unsupported construction (v=${v}, alg="${alg}"). This is a ` +
|
|
71
|
+
'server-side rollback or tamper.');
|
|
72
|
+
}
|
|
73
|
+
const authentic = await verifyEpochsMac({
|
|
74
|
+
marker: encryption,
|
|
75
|
+
epochSecret: writeUnwrapped.secret
|
|
76
|
+
});
|
|
77
|
+
if (!authentic) {
|
|
78
|
+
throw new IntegrityError('The epoch configuration failed to authenticate; a server-side ' +
|
|
79
|
+
'rollback or tamper of the encryption marker was detected (the ' +
|
|
80
|
+
'MAC over its epoch configuration does not verify).');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
56
83
|
// Read keys: the eagerly-unwrapped write key, plus a LAZY key per other named
|
|
57
84
|
// epoch. Each lazy key knows its `id` up front (derived from the epoch id, so
|
|
58
85
|
// the codec's kid-match filter needs no secret) and unwraps + reconstructs its
|
|
@@ -71,12 +98,15 @@ export async function resolveEpochKeys({ encryption, keyAgreementKey }) {
|
|
|
71
98
|
/**
|
|
72
99
|
* Unwraps and reconstructs a single epoch's key pair for this reader, or returns
|
|
73
100
|
* `null` when the reader is not a recipient of the epoch or its entry does not
|
|
74
|
-
* unwrap (a corrupt entry -- never treat `null` as a key).
|
|
101
|
+
* unwrap (a corrupt entry -- never treat `null` as a key). Returns the raw
|
|
102
|
+
* 32-byte epoch secret alongside the reconstructed key pair, so a caller that
|
|
103
|
+
* must authenticate the epoch configuration (the `epochsMac`) can key the MAC
|
|
104
|
+
* without re-unwrapping.
|
|
75
105
|
*
|
|
76
106
|
* @param options {object}
|
|
77
107
|
* @param options.epoch {CollectionEncryptionEpoch} the epoch to unwrap
|
|
78
108
|
* @param options.keyAgreementKey {IKeyAgreementKey} the reader's own KAK
|
|
79
|
-
* @returns {Promise<IKeyAgreementKey | null>}
|
|
109
|
+
* @returns {Promise<{ key: IKeyAgreementKey; secret: Uint8Array } | null>}
|
|
80
110
|
*/
|
|
81
111
|
async function unwrapEpochKey({ epoch, keyAgreementKey }) {
|
|
82
112
|
const entry = epoch.recipients.find(recipient => recipient.header.kid === keyAgreementKey.id);
|
|
@@ -87,7 +117,7 @@ async function unwrapEpochKey({ epoch, keyAgreementKey }) {
|
|
|
87
117
|
if (!secret) {
|
|
88
118
|
return null;
|
|
89
119
|
}
|
|
90
|
-
return reconstructEpochKeyPair({ epochId: epoch.id, secret });
|
|
120
|
+
return { key: reconstructEpochKeyPair({ epochId: epoch.id, secret }), secret };
|
|
91
121
|
}
|
|
92
122
|
/**
|
|
93
123
|
* Builds a lazily-unwrapping read key for a named epoch: an `IKeyAgreementKey`
|
|
@@ -107,16 +137,16 @@ function lazyEpochKey({ epoch, keyAgreementKey }) {
|
|
|
107
137
|
let pending;
|
|
108
138
|
const resolve = () => {
|
|
109
139
|
if (pending === undefined) {
|
|
110
|
-
const promise = unwrapEpochKey({ epoch, keyAgreementKey }).then(
|
|
111
|
-
if (!
|
|
112
|
-
// The reader was named in this epoch (else no lazy key was built)
|
|
113
|
-
// its entry did not unwrap: a corrupt entry. The codec's
|
|
114
|
-
// catches this and tries the next candidate before
|
|
115
|
-
// typed failure.
|
|
140
|
+
const promise = unwrapEpochKey({ epoch, keyAgreementKey }).then(unwrapped => {
|
|
141
|
+
if (!unwrapped) {
|
|
142
|
+
// The reader was named in this epoch (else no lazy key was built)
|
|
143
|
+
// but its entry did not unwrap: a corrupt entry. The codec's
|
|
144
|
+
// `_decrypt` catches this and tries the next candidate before
|
|
145
|
+
// surfacing its own typed failure.
|
|
116
146
|
throw new KeyUnwrapError(`This reader's recipient entry for epoch "${epoch.id}" did not ` +
|
|
117
147
|
'unwrap (a corrupt entry).');
|
|
118
148
|
}
|
|
119
|
-
return key;
|
|
149
|
+
return unwrapped.key;
|
|
120
150
|
});
|
|
121
151
|
// Cache only a successful unwrap: drop a rejected promise so the next
|
|
122
152
|
// read re-attempts (the failure may have been transient), rather than
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epochKeys.js","sourceRoot":"","sources":["../../src/edv/epochKeys.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"epochKeys.js","sourceRoot":"","sources":["../../src/edv/epochKeys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { CollectionEncryption, CollectionEncryptionEpochsMac } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Computes the `epochsMac` field for a marker under the current epoch's secret.
|
|
4
|
+
* Compute this over the exact marker state being written (member fields already
|
|
5
|
+
* stamped), since a compare-and-swap retry re-reads the marker.
|
|
6
|
+
*
|
|
7
|
+
* @param options {object}
|
|
8
|
+
* @param options.marker {CollectionEncryption} the marker being written
|
|
9
|
+
* @param options.epochSecret {Uint8Array} the 32-byte current epoch secret
|
|
10
|
+
* @returns {Promise<CollectionEncryptionEpochsMac>}
|
|
11
|
+
*/
|
|
12
|
+
export declare function computeEpochsMac({ marker, epochSecret }: {
|
|
13
|
+
marker: CollectionEncryption;
|
|
14
|
+
epochSecret: Uint8Array;
|
|
15
|
+
}): Promise<CollectionEncryptionEpochsMac>;
|
|
16
|
+
/**
|
|
17
|
+
* Verifies a marker's `epochsMac` against a recomputation from the current
|
|
18
|
+
* epoch's secret. Returns `false` on any mismatch (or a malformed `mac`); the
|
|
19
|
+
* caller decides the error semantics. The MAC construction's own version/alg
|
|
20
|
+
* (`v` / `alg`) is validated by the caller before this is called.
|
|
21
|
+
*
|
|
22
|
+
* @param options {object}
|
|
23
|
+
* @param options.marker {CollectionEncryption} the marker to verify (its
|
|
24
|
+
* `epochsMac.mac` is the tag under test)
|
|
25
|
+
* @param options.epochSecret {Uint8Array} the 32-byte current epoch secret
|
|
26
|
+
* @returns {Promise<boolean>}
|
|
27
|
+
*/
|
|
28
|
+
export declare function verifyEpochsMac({ marker, epochSecret }: {
|
|
29
|
+
marker: CollectionEncryption;
|
|
30
|
+
epochSecret: Uint8Array;
|
|
31
|
+
}): Promise<boolean>;
|
|
32
|
+
//# sourceMappingURL=epochMac.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epochMac.d.ts","sourceRoot":"","sources":["../../src/edv/epochMac.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACV,oBAAoB,EACpB,6BAA6B,EAC9B,MAAM,aAAa,CAAA;AAwEpB;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,MAAM,EACN,WAAW,EACZ,EAAE;IACD,MAAM,EAAE,oBAAoB,CAAA;IAC5B,WAAW,EAAE,UAAU,CAAA;CACxB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAQzC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CAAC,EACpC,MAAM,EACN,WAAW,EACZ,EAAE;IACD,MAAM,EAAE,oBAAoB,CAAA;IAC5B,WAAW,EAAE,UAAU,CAAA;CACxB,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBnB"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Authenticated epoch configuration for multi-recipient encrypted Collections:
|
|
6
|
+
* a MAC over a Collection `encryption` marker's epoch configuration, keyed from
|
|
7
|
+
* the current epoch's secret (which the server never holds). It lets a reader
|
|
8
|
+
* detect a server-side rollback of `currentEpoch` or a fabricated epoch list --
|
|
9
|
+
* a malicious server cannot forge a valid MAC without the epoch secret.
|
|
10
|
+
*
|
|
11
|
+
* The MAC covers only `scheme`, `version`, `currentEpoch`, and the ordered list
|
|
12
|
+
* of epoch ids -- deliberately NOT the recipient entries, so adding a recipient
|
|
13
|
+
* (which cannot be forged without the epoch secret anyway) does not invalidate
|
|
14
|
+
* the MAC. Covering `version` makes stripping the marker's scheme version
|
|
15
|
+
* MAC-detectable.
|
|
16
|
+
*
|
|
17
|
+
* Documented limitation (mirrors Cryptomator's versionMac): a server can still
|
|
18
|
+
* replay an ENTIRE prior consistent configuration (an old epoch list with its
|
|
19
|
+
* matching old MAC). Detecting that needs client-side monotonic state, which is
|
|
20
|
+
* out of scope here.
|
|
21
|
+
*/
|
|
22
|
+
import { base64urlnopad } from '@scure/base';
|
|
23
|
+
const TEXT_ENCODER = new TextEncoder();
|
|
24
|
+
/**
|
|
25
|
+
* The HKDF `info` string binding the derived key to this MAC construction.
|
|
26
|
+
*/
|
|
27
|
+
const MAC_KEY_INFO = TEXT_ENCODER.encode('was-epoch-config-mac/v1');
|
|
28
|
+
/**
|
|
29
|
+
* The domain-separation prefix prepended to the JSON payload before it is MACed.
|
|
30
|
+
*/
|
|
31
|
+
const MAC_PAYLOAD_PREFIX = 'was-epoch-config/v1.';
|
|
32
|
+
/**
|
|
33
|
+
* Derives the HMAC-SHA256 key from a 32-byte epoch secret:
|
|
34
|
+
* HKDF-SHA256(ikm = the epoch secret, salt = empty, info =
|
|
35
|
+
* "was-epoch-config-mac/v1", length 32 bytes). Uses WebCrypto (`crypto.subtle`)
|
|
36
|
+
* so it works unchanged in Node 24 and browsers.
|
|
37
|
+
*
|
|
38
|
+
* @param epochSecret {Uint8Array} the 32-byte current epoch secret
|
|
39
|
+
* @returns {Promise<CryptoKey>} the derived HMAC key (sign + verify)
|
|
40
|
+
*/
|
|
41
|
+
async function deriveMacKey(epochSecret) {
|
|
42
|
+
const ikm = await crypto.subtle.importKey('raw', epochSecret, 'HKDF', false, ['deriveKey']);
|
|
43
|
+
return crypto.subtle.deriveKey({
|
|
44
|
+
name: 'HKDF',
|
|
45
|
+
hash: 'SHA-256',
|
|
46
|
+
salt: new Uint8Array(0),
|
|
47
|
+
info: MAC_KEY_INFO
|
|
48
|
+
}, ikm, { name: 'HMAC', hash: 'SHA-256', length: 256 }, false, ['sign', 'verify']);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Builds the MACed payload bytes for a marker's epoch configuration:
|
|
52
|
+
* `UTF8("was-epoch-config/v1." + JSON.stringify({ scheme, version,
|
|
53
|
+
* currentEpoch, epochs }))`, with `version` normalized to `null` when absent
|
|
54
|
+
* and `epochs` the ordered list of epoch id strings. The object member order is
|
|
55
|
+
* fixed so both sides serialize identically.
|
|
56
|
+
*
|
|
57
|
+
* @param marker {CollectionEncryption} the marker whose epoch configuration is
|
|
58
|
+
* being authenticated
|
|
59
|
+
* @returns {Uint8Array}
|
|
60
|
+
*/
|
|
61
|
+
function macPayload(marker) {
|
|
62
|
+
const payload = {
|
|
63
|
+
scheme: marker.scheme,
|
|
64
|
+
version: marker.version ?? null,
|
|
65
|
+
currentEpoch: marker.currentEpoch,
|
|
66
|
+
epochs: (marker.epochs ?? []).map(epoch => epoch.id)
|
|
67
|
+
};
|
|
68
|
+
const bytes = TEXT_ENCODER.encode(MAC_PAYLOAD_PREFIX + JSON.stringify(payload));
|
|
69
|
+
return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Computes the `epochsMac` field for a marker under the current epoch's secret.
|
|
73
|
+
* Compute this over the exact marker state being written (member fields already
|
|
74
|
+
* stamped), since a compare-and-swap retry re-reads the marker.
|
|
75
|
+
*
|
|
76
|
+
* @param options {object}
|
|
77
|
+
* @param options.marker {CollectionEncryption} the marker being written
|
|
78
|
+
* @param options.epochSecret {Uint8Array} the 32-byte current epoch secret
|
|
79
|
+
* @returns {Promise<CollectionEncryptionEpochsMac>}
|
|
80
|
+
*/
|
|
81
|
+
export async function computeEpochsMac({ marker, epochSecret }) {
|
|
82
|
+
const key = await deriveMacKey(epochSecret);
|
|
83
|
+
const signature = await crypto.subtle.sign('HMAC', key, macPayload(marker));
|
|
84
|
+
return {
|
|
85
|
+
v: 1,
|
|
86
|
+
alg: 'HS256',
|
|
87
|
+
mac: base64urlnopad.encode(new Uint8Array(signature))
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Verifies a marker's `epochsMac` against a recomputation from the current
|
|
92
|
+
* epoch's secret. Returns `false` on any mismatch (or a malformed `mac`); the
|
|
93
|
+
* caller decides the error semantics. The MAC construction's own version/alg
|
|
94
|
+
* (`v` / `alg`) is validated by the caller before this is called.
|
|
95
|
+
*
|
|
96
|
+
* @param options {object}
|
|
97
|
+
* @param options.marker {CollectionEncryption} the marker to verify (its
|
|
98
|
+
* `epochsMac.mac` is the tag under test)
|
|
99
|
+
* @param options.epochSecret {Uint8Array} the 32-byte current epoch secret
|
|
100
|
+
* @returns {Promise<boolean>}
|
|
101
|
+
*/
|
|
102
|
+
export async function verifyEpochsMac({ marker, epochSecret }) {
|
|
103
|
+
const epochsMac = marker.epochsMac;
|
|
104
|
+
if (!epochsMac) {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
let mac;
|
|
108
|
+
try {
|
|
109
|
+
mac = base64urlnopad.decode(epochsMac.mac);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
const key = await deriveMacKey(epochSecret);
|
|
115
|
+
return crypto.subtle.verify('HMAC', key, mac, macPayload(marker));
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=epochMac.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epochMac.js","sourceRoot":"","sources":["../../src/edv/epochMac.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAM5C,MAAM,YAAY,GAAG,IAAI,WAAW,EAAE,CAAA;AAEtC;;GAEG;AACH,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAA;AAEnE;;GAEG;AACH,MAAM,kBAAkB,GAAG,sBAAsB,CAAA;AAEjD;;;;;;;;GAQG;AACH,KAAK,UAAU,YAAY,CAAC,WAAuB;IACjD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CACvC,KAAK,EACL,WAAqC,EACrC,MAAM,EACN,KAAK,EACL,CAAC,WAAW,CAAC,CACd,CAAA;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAC5B;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC;QACvB,IAAI,EAAE,YAAY;KACnB,EACD,GAAG,EACH,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,EAC9C,KAAK,EACL,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnB,CAAA;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,UAAU,CAAC,MAA4B;IAC9C,MAAM,OAAO,GAAG;QACd,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;QAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;KACrD,CAAA;IACD,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAC/B,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAC7C,CAAA;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CACrB,CAAA;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EACrC,MAAM,EACN,WAAW,EAIZ;IACC,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,CAAA;IAC3C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;IAC3E,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,GAAG,EAAE,OAAO;QACZ,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;KACtD,CAAA;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EACpC,MAAM,EACN,WAAW,EAIZ;IACC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;IAClC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,GAAe,CAAA;IACnB,IAAI,CAAC;QACH,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,CAAA;IAC3C,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CACzB,MAAM,EACN,GAAG,EACH,GAA6B,EAC7B,UAAU,CAAC,MAAM,CAAC,CACnB,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipients.d.ts","sourceRoot":"","sources":["../../src/edv/recipients.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGxC,OAAO,KAAK,EACV,oBAAoB,EAEpB,cAAc,EACf,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"recipients.d.ts","sourceRoot":"","sources":["../../src/edv/recipients.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGxC,OAAO,KAAK,EACV,oBAAoB,EAEpB,cAAc,EACf,MAAM,aAAa,CAAA;AAQpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAE1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAE1D;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,eAAe,EAAE,gBAAgB,CAAA;CAClC;AAQD;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAAC,EACnC,UAAU,EACV,UAAU,EACX,EAAE;IACD,UAAU,EAAE,UAAU,CAAA;IACtB,UAAU,EAAE,kBAAkB,EAAE,CAAA;CACjC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAyChC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,YAAY,CAAC,EACjC,UAAU,EACV,SAAS,EACT,KAAK,EACN,EAAE;IACD,UAAU,EAAE,UAAU,CAAA;IACtB,SAAS,EAAE,kBAAkB,CAAA;IAC7B,KAAK,EAAE,QAAQ,CAAA;CAChB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuDhC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAsB,eAAe,CAAC,EACpC,UAAU,EACV,KAAK,EACL,WAAW,EACX,MAAM,EACN,mBAAgD,EACjD,EAAE;IACD,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,EAAE,KAAK,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,cAAc,GAAG,cAAc,EAAE,CAAA;IACzC,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;CACnE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA+FhC"}
|
package/dist/edv/recipients.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { unreadableDescriptionError } from '../internal/describe.js';
|
|
2
2
|
import { PreconditionFailedError, ValidationError } from '../errors.js';
|
|
3
3
|
import { didKeyResolver, mintEpoch, unwrapEpochSecret, wrapEpochSecret } from './epochCrypto.js';
|
|
4
|
+
import { computeEpochsMac } from './epochMac.js';
|
|
4
5
|
/**
|
|
5
6
|
* How many times a recipient CAS write retries a stale (`412`) description
|
|
6
7
|
* before surfacing {@link PreconditionFailedError}.
|
|
@@ -30,12 +31,26 @@ export async function initRecipients({ collection, recipients }) {
|
|
|
30
31
|
};
|
|
31
32
|
return casUpdateMarker({
|
|
32
33
|
collection,
|
|
33
|
-
mutate: marker => {
|
|
34
|
+
mutate: async (marker) => {
|
|
34
35
|
if (marker.epochs && marker.epochs.length > 0) {
|
|
35
36
|
throw new ValidationError('This collection already has key epochs; use addRecipient to add a ' +
|
|
36
37
|
'reader instead of initRecipients.');
|
|
37
38
|
}
|
|
38
|
-
|
|
39
|
+
// Declaring the first epochs, so stamp scheme version 1 when the marker
|
|
40
|
+
// does not already carry one, and authenticate the epoch configuration
|
|
41
|
+
// with a MAC keyed from this first epoch's secret (computed over the exact
|
|
42
|
+
// marker being written, since a CAS retry re-reads the marker).
|
|
43
|
+
const next = {
|
|
44
|
+
...marker,
|
|
45
|
+
version: marker.version ?? 1,
|
|
46
|
+
epochs: [epoch],
|
|
47
|
+
currentEpoch: epochId
|
|
48
|
+
};
|
|
49
|
+
const epochsMac = await computeEpochsMac({
|
|
50
|
+
marker: next,
|
|
51
|
+
epochSecret: secret
|
|
52
|
+
});
|
|
53
|
+
return { ...next, epochsMac };
|
|
39
54
|
}
|
|
40
55
|
});
|
|
41
56
|
}
|
|
@@ -188,11 +203,19 @@ export async function removeRecipient({ collection, space, recipientId, revoke,
|
|
|
188
203
|
id: epochId,
|
|
189
204
|
recipients: newRecipients
|
|
190
205
|
};
|
|
191
|
-
|
|
206
|
+
// Re-authenticate the epoch configuration under the NEW epoch's secret
|
|
207
|
+
// (the rotating caller just minted it), computed over the exact marker
|
|
208
|
+
// being written so a CAS retry re-MACs the re-read marker state.
|
|
209
|
+
const next = {
|
|
192
210
|
...marker,
|
|
193
211
|
epochs: [...epochs, newEpoch],
|
|
194
212
|
currentEpoch: epochId
|
|
195
213
|
};
|
|
214
|
+
const epochsMac = await computeEpochsMac({
|
|
215
|
+
marker: next,
|
|
216
|
+
epochSecret: secret
|
|
217
|
+
});
|
|
218
|
+
return { ...next, epochsMac };
|
|
196
219
|
}
|
|
197
220
|
});
|
|
198
221
|
// 2. Pull axis: revoke the reader's capability/capabilities AFTER the rotation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipients.js","sourceRoot":"","sources":["../../src/edv/recipients.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAMvE,OAAO,EACL,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,eAAe,EAChB,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"recipients.js","sourceRoot":"","sources":["../../src/edv/recipients.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ export type { IZcap, IDelegatedZcap, IRootZcap, ISigner };
|
|
|
22
22
|
* `ResourceListing`) and the collections-in-a-space listing is `CollectionsList`
|
|
23
23
|
* (formerly `CollectionListing`).
|
|
24
24
|
*/
|
|
25
|
-
export type { Action, ActionInput, SpaceDescription, CollectionDescription, CollectionEncryption, CollectionEncryptionEpoch, CollectionEncryptionRecipient, PolicyDocument, LinkSet, LinkSetEntry, CollectionSummary, CollectionsList, SpaceSummary, SpaceListing, ResourceSummary, CollectionResourcesList, ResourceMetadata, ResourceMetadataCustom, ImportStats, BackendReference, BackendDescriptor, BackendRegistration, BackendConnectionInput, BackendConnectionPublic, StorageLimit, CollectionUsage, BackendUsage, SpaceQuotaReport } from '@interop/storage-core';
|
|
25
|
+
export type { Action, ActionInput, SpaceDescription, CollectionDescription, CollectionEncryption, CollectionEncryptionEpoch, CollectionEncryptionEpochsMac, CollectionEncryptionRecipient, PolicyDocument, LinkSet, LinkSetEntry, CollectionSummary, CollectionsList, SpaceSummary, SpaceListing, ResourceSummary, CollectionResourcesList, ResourceMetadata, ResourceMetadataCustom, ImportStats, BackendReference, BackendDescriptor, BackendRegistration, BackendConnectionInput, BackendConnectionPublic, StorageLimit, CollectionUsage, BackendUsage, SpaceQuotaReport } from '@interop/storage-core';
|
|
26
26
|
import type { BackendReference, CollectionEncryption } from '@interop/storage-core';
|
|
27
27
|
/**
|
|
28
28
|
* The client-writable fields of a Collection Description -- the shape shared
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@interop/was-client",
|
|
3
3
|
"description": "A developer-friendly client for Wallet Attached Storage (WAS) servers.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.18.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"build": "pnpm run clear && tsc",
|
|
@@ -44,11 +44,11 @@
|
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@interop/data-integrity-core": "^8.3.0",
|
|
46
46
|
"@interop/ed25519-signature": "^7.1.4",
|
|
47
|
-
"@interop/edv-client": "^17.
|
|
47
|
+
"@interop/edv-client": "^17.8.0",
|
|
48
48
|
"@interop/ezcap": "^7.4.1",
|
|
49
49
|
"@interop/http-client": "^1.0.4",
|
|
50
|
-
"@interop/minimal-cipher": "^7.
|
|
51
|
-
"@interop/storage-core": "^0.3.
|
|
50
|
+
"@interop/minimal-cipher": "^7.8.0",
|
|
51
|
+
"@interop/storage-core": "^0.3.8",
|
|
52
52
|
"@interop/x25519-key-agreement-key": "^5.2.1",
|
|
53
53
|
"@scure/base": "^2.2.0"
|
|
54
54
|
},
|