@interop/did-cli 0.8.0 → 0.9.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/CHANGELOG.md +67 -0
- package/README.md +195 -1
- package/dist/commands/did.d.ts.map +1 -1
- package/dist/commands/did.js +25 -6
- package/dist/commands/did.js.map +1 -1
- package/dist/commands/edv.d.ts +63 -0
- package/dist/commands/edv.d.ts.map +1 -0
- package/dist/commands/edv.js +627 -0
- package/dist/commands/edv.js.map +1 -0
- package/dist/commands/key.d.ts.map +1 -1
- package/dist/commands/key.js +44 -8
- package/dist/commands/key.js.map +1 -1
- package/dist/edv/core.d.ts +60 -0
- package/dist/edv/core.d.ts.map +1 -0
- package/dist/edv/core.js +75 -0
- package/dist/edv/core.js.map +1 -0
- package/dist/edv/document.d.ts +25 -0
- package/dist/edv/document.d.ts.map +1 -0
- package/dist/edv/document.js +19 -0
- package/dist/edv/document.js.map +1 -0
- package/dist/edv/hmac.d.ts +26 -0
- package/dist/edv/hmac.d.ts.map +1 -0
- package/dist/edv/hmac.js +67 -0
- package/dist/edv/hmac.js.map +1 -0
- package/dist/edv/recipients.d.ts +65 -0
- package/dist/edv/recipients.d.ts.map +1 -0
- package/dist/edv/recipients.js +253 -0
- package/dist/edv/recipients.js.map +1 -0
- package/dist/edv/stream.d.ts +69 -0
- package/dist/edv/stream.d.ts.map +1 -0
- package/dist/edv/stream.js +169 -0
- package/dist/edv/stream.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/meta.d.ts +1 -0
- package/dist/meta.d.ts.map +1 -1
- package/dist/meta.js +1 -1
- package/dist/meta.js.map +1 -1
- package/dist/storage.d.ts +6 -4
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +6 -5
- package/dist/storage.js.map +1 -1
- package/dist/was/io.d.ts +14 -0
- package/dist/was/io.d.ts.map +1 -1
- package/dist/was/io.js +20 -7
- package/dist/was/io.js.map +1 -1
- package/package.json +6 -4
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recipient and key-agreement resolution for the `edv encrypt`/`edv decrypt`
|
|
3
|
+
* commands. Normalizes the several recipient reference forms (a raw X25519
|
|
4
|
+
* `publicKeyMultibase`, a wallet key fingerprint or handle, a DID or DID URL,
|
|
5
|
+
* and a key-document JSON file) into `X25519KeyAgreementKey2020` instances --
|
|
6
|
+
* the shape `@interop/minimal-cipher`'s `keyResolver` returns (the cipher reads
|
|
7
|
+
* `id` and `publicKeyMultibase` from a recipient on encrypt, and `id` and
|
|
8
|
+
* `deriveSecret` from the key on decrypt, all of which an instance provides).
|
|
9
|
+
* Builds the recipients array plus that resolver, and reconstructs stored keys
|
|
10
|
+
* for decrypt.
|
|
11
|
+
*/
|
|
12
|
+
import { readFile } from 'node:fs/promises';
|
|
13
|
+
import { securityLoader } from '@interop/security-document-loader';
|
|
14
|
+
import { X25519KeyAgreementKey2020 } from '@interop/x25519-key-agreement-key';
|
|
15
|
+
import { listCollection, loadFromCollection } from '../storage.js';
|
|
16
|
+
import { resolveKeyRef } from '../meta.js';
|
|
17
|
+
/** The X25519 key-agreement verification-method type minimal-cipher expects. */
|
|
18
|
+
export const KEY_AGREEMENT_TYPE = 'X25519KeyAgreementKey2020';
|
|
19
|
+
/**
|
|
20
|
+
* Document loader for DID-URL recipient resolution: resolves a bare DID to its
|
|
21
|
+
* DID document and dereferences a `did#fragment` URL straight to its
|
|
22
|
+
* verification-method node, for both did:key (offline) and did:web (fetched).
|
|
23
|
+
* Built once and reused. (Per project convention, DID/JSON-LD resolution goes
|
|
24
|
+
* through `@interop/security-document-loader`, never a hand-rolled loader.)
|
|
25
|
+
*/
|
|
26
|
+
const documentLoader = securityLoader().build();
|
|
27
|
+
/**
|
|
28
|
+
* Construct an X25519 key-agreement key from a verification method or stored
|
|
29
|
+
* key pair. `didKey: true` defaults a source with no `controller`/`id` to its
|
|
30
|
+
* `did:key` form, so the key class derives `.id` as `did:key:<mb>#<mb>` -- the
|
|
31
|
+
* `kid` encrypt and decrypt both match on -- while a source that already
|
|
32
|
+
* carries an `id`/`controller` (e.g. a DID verification method) keeps it. A
|
|
33
|
+
* `type: 'Multikey'` source is normalized via `fromMultikey`. The constructor
|
|
34
|
+
* validates the multibase header bytes.
|
|
35
|
+
*
|
|
36
|
+
* @param source {Record<string, any>}
|
|
37
|
+
* @returns {Promise<KeyAgreementKey>}
|
|
38
|
+
*/
|
|
39
|
+
async function keyAgreementKeyFrom(source) {
|
|
40
|
+
const key = await X25519KeyAgreementKey2020.from({ didKey: true, ...source });
|
|
41
|
+
return key;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Split a DID URL into its base DID and `#fragment` (undefined when absent).
|
|
45
|
+
*
|
|
46
|
+
* @param options {object}
|
|
47
|
+
* @param options.ref {string}
|
|
48
|
+
* @returns {{did: string, fragment?: string}}
|
|
49
|
+
*/
|
|
50
|
+
function splitFragment({ ref }) {
|
|
51
|
+
const hash = ref.indexOf('#');
|
|
52
|
+
if (hash === -1) {
|
|
53
|
+
return { did: ref };
|
|
54
|
+
}
|
|
55
|
+
return { did: ref.slice(0, hash), fragment: ref.slice(hash + 1) };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Resolve a DID URL through the security document loader. A bare DID resolves
|
|
59
|
+
* to its DID document; a `did#fragment` URL is dereferenced straight to its
|
|
60
|
+
* verification-method node.
|
|
61
|
+
*
|
|
62
|
+
* @param options {object}
|
|
63
|
+
* @param options.url {string}
|
|
64
|
+
* @returns {Promise<Record<string, any>>}
|
|
65
|
+
*/
|
|
66
|
+
async function resolveDidUrl({ url }) {
|
|
67
|
+
const { document } = (await documentLoader(url));
|
|
68
|
+
return document;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* True when a `publicKeyMultibase` carries the X25519 multicodec header. This
|
|
72
|
+
* is the type-agnostic discriminator for a usable key-agreement key: it accepts
|
|
73
|
+
* both an `X25519KeyAgreementKey2020` and a `Multikey` whose key is X25519,
|
|
74
|
+
* while rejecting an Ed25519/other key, regardless of the `type` string a DID
|
|
75
|
+
* document happens to use.
|
|
76
|
+
*
|
|
77
|
+
* @param publicKeyMultibase {string | undefined}
|
|
78
|
+
* @returns {boolean}
|
|
79
|
+
*/
|
|
80
|
+
function isX25519PublicKey(publicKeyMultibase) {
|
|
81
|
+
if (!publicKeyMultibase) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
// The constructor validates the X25519 header bytes and throws otherwise.
|
|
86
|
+
X25519KeyAgreementKey2020.fromFingerprint({
|
|
87
|
+
fingerprint: publicKeyMultibase
|
|
88
|
+
});
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Validate that a verification method is a usable X25519 key-agreement key
|
|
97
|
+
* (an `X25519KeyAgreementKey2020` or a `Multikey` whose public key is X25519)
|
|
98
|
+
* and construct it.
|
|
99
|
+
*
|
|
100
|
+
* @param options {object}
|
|
101
|
+
* @param options.method {Record<string, any>}
|
|
102
|
+
* @param options.ref {string}
|
|
103
|
+
* @returns {Promise<KeyAgreementKey>}
|
|
104
|
+
*/
|
|
105
|
+
async function toKeyAgreementKey({ method, ref }) {
|
|
106
|
+
if (!isX25519PublicKey(method.publicKeyMultibase)) {
|
|
107
|
+
throw new Error(`Recipient "${ref}" is not an ${KEY_AGREEMENT_TYPE} key.`);
|
|
108
|
+
}
|
|
109
|
+
return keyAgreementKeyFrom(method);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Resolve a DID or DID URL recipient to its X25519 key-agreement key. A bare
|
|
113
|
+
* DID with a single keyAgreement key uses that key; one with several requires
|
|
114
|
+
* the `#fragment` form to disambiguate.
|
|
115
|
+
*
|
|
116
|
+
* @param options {object}
|
|
117
|
+
* @param options.ref {string}
|
|
118
|
+
* @returns {Promise<KeyAgreementKey>}
|
|
119
|
+
*/
|
|
120
|
+
async function resolveDidRecipient({ ref }) {
|
|
121
|
+
const { did, fragment } = splitFragment({ ref });
|
|
122
|
+
// A fragment URL dereferences straight to its verification-method node.
|
|
123
|
+
if (fragment !== undefined) {
|
|
124
|
+
return toKeyAgreementKey({ method: await resolveDidUrl({ url: ref }), ref });
|
|
125
|
+
}
|
|
126
|
+
// A bare DID: pick the single keyAgreement key, dereferencing any entries
|
|
127
|
+
// that are id references rather than embedded verification methods.
|
|
128
|
+
const didDocument = await resolveDidUrl({ url: did });
|
|
129
|
+
const entries = (didDocument.keyAgreement ?? []);
|
|
130
|
+
const methods = [];
|
|
131
|
+
for (const entry of entries) {
|
|
132
|
+
methods.push(typeof entry === 'string' ? await resolveDidUrl({ url: entry }) : entry);
|
|
133
|
+
}
|
|
134
|
+
const usable = methods.filter(method => method.type === KEY_AGREEMENT_TYPE && method.publicKeyMultibase);
|
|
135
|
+
if (usable.length === 0) {
|
|
136
|
+
throw new Error(`DID ${did} has no ${KEY_AGREEMENT_TYPE} keyAgreement key.`);
|
|
137
|
+
}
|
|
138
|
+
if (usable.length > 1) {
|
|
139
|
+
throw new Error(`DID ${did} has ${usable.length} keyAgreement keys; ` +
|
|
140
|
+
'use the did#fragment form to choose one.');
|
|
141
|
+
}
|
|
142
|
+
return toKeyAgreementKey({ method: usable[0], ref });
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Resolve one `--recipient` value to a recipient key. Resolution order: a raw
|
|
146
|
+
* X25519 `publicKeyMultibase` (starts `z6LS`), then a DID / DID URL, then a
|
|
147
|
+
* wallet key fingerprint or handle.
|
|
148
|
+
*
|
|
149
|
+
* @param options {object}
|
|
150
|
+
* @param options.ref {string}
|
|
151
|
+
* @returns {Promise<KeyAgreementKey>}
|
|
152
|
+
*/
|
|
153
|
+
export async function resolveRecipient({ ref }) {
|
|
154
|
+
if (ref.startsWith('z6LS')) {
|
|
155
|
+
return toKeyAgreementKey({
|
|
156
|
+
method: { type: KEY_AGREEMENT_TYPE, publicKeyMultibase: ref },
|
|
157
|
+
ref
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
if (ref.startsWith('did:')) {
|
|
161
|
+
return resolveDidRecipient({ ref });
|
|
162
|
+
}
|
|
163
|
+
const resolved = await resolveKeyRef({ ref });
|
|
164
|
+
if (!resolved?.key.publicKeyMultibase) {
|
|
165
|
+
throw new Error(`Could not resolve recipient "${ref}".`);
|
|
166
|
+
}
|
|
167
|
+
const stored = resolved.key;
|
|
168
|
+
if (stored.type !== KEY_AGREEMENT_TYPE) {
|
|
169
|
+
throw new Error(`Wallet key "${ref}" is not an ${KEY_AGREEMENT_TYPE} key.`);
|
|
170
|
+
}
|
|
171
|
+
return keyAgreementKeyFrom(stored);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Load and validate a key-document JSON file holding an X25519 public key, and
|
|
175
|
+
* construct its key-agreement key.
|
|
176
|
+
*
|
|
177
|
+
* @param options {object}
|
|
178
|
+
* @param options.path {string}
|
|
179
|
+
* @returns {Promise<KeyAgreementKey>}
|
|
180
|
+
*/
|
|
181
|
+
export async function resolveRecipientFile({ path }) {
|
|
182
|
+
let method;
|
|
183
|
+
try {
|
|
184
|
+
method = JSON.parse(await readFile(path, 'utf8'));
|
|
185
|
+
}
|
|
186
|
+
catch (err) {
|
|
187
|
+
throw new Error(`Could not read key document "${path}": ${err.message}`, {
|
|
188
|
+
cause: err
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
return toKeyAgreementKey({ method, ref: path });
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Resolve a `--key` reference (fingerprint or handle) to a reconstructed
|
|
195
|
+
* X25519 key-agreement key. The referenced key must be a stored X25519 key
|
|
196
|
+
* with its secret half.
|
|
197
|
+
*
|
|
198
|
+
* @param options {object}
|
|
199
|
+
* @param options.ref {string}
|
|
200
|
+
* @returns {Promise<KeyAgreementKey>}
|
|
201
|
+
*/
|
|
202
|
+
export async function loadKeyAgreementKey({ ref }) {
|
|
203
|
+
const resolved = await resolveKeyRef({ ref });
|
|
204
|
+
if (!resolved) {
|
|
205
|
+
throw new Error(`No locally stored key found for "${ref}".`);
|
|
206
|
+
}
|
|
207
|
+
const stored = resolved.key;
|
|
208
|
+
if (stored.type !== KEY_AGREEMENT_TYPE) {
|
|
209
|
+
throw new Error(`Wallet key "${ref}" is not an ${KEY_AGREEMENT_TYPE} key.`);
|
|
210
|
+
}
|
|
211
|
+
if (!stored.privateKeyMultibase) {
|
|
212
|
+
throw new Error(`Wallet key "${ref}" has no secret key to decrypt with.`);
|
|
213
|
+
}
|
|
214
|
+
return keyAgreementKeyFrom(stored);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Auto-select the decryption key when `--key` is omitted: scan the stored
|
|
218
|
+
* X25519 secret keys and return the one whose `id` (`kid`) matches a recipient
|
|
219
|
+
* of the JWE. Throws when none match or more than one does.
|
|
220
|
+
*
|
|
221
|
+
* @param options {object}
|
|
222
|
+
* @param options.jwe {{recipients?: {header?: {kid?: string}}[]}}
|
|
223
|
+
* @returns {Promise<KeyAgreementKey>}
|
|
224
|
+
*/
|
|
225
|
+
export async function autoSelectKeyAgreementKey({ jwe }) {
|
|
226
|
+
const kids = new Set((jwe.recipients ?? [])
|
|
227
|
+
.map(recipient => recipient?.header?.kid)
|
|
228
|
+
.filter((kid) => typeof kid === 'string'));
|
|
229
|
+
const storageIds = await listCollection('keys');
|
|
230
|
+
const matches = [];
|
|
231
|
+
for (const storageId of storageIds) {
|
|
232
|
+
const stored = await loadFromCollection('keys', storageId);
|
|
233
|
+
if (stored.type !== KEY_AGREEMENT_TYPE ||
|
|
234
|
+
!stored.privateKeyMultibase ||
|
|
235
|
+
!stored.publicKeyMultibase) {
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
const key = await keyAgreementKeyFrom(stored);
|
|
239
|
+
if (kids.has(key.id)) {
|
|
240
|
+
matches.push(key);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if (matches.length === 0) {
|
|
244
|
+
throw new Error('No stored X25519 key matches any recipient of this JWE; ' +
|
|
245
|
+
'pass --key to choose one.');
|
|
246
|
+
}
|
|
247
|
+
if (matches.length > 1) {
|
|
248
|
+
throw new Error(`${matches.length} stored X25519 keys match this JWE; ` +
|
|
249
|
+
'pass --key to choose one.');
|
|
250
|
+
}
|
|
251
|
+
return matches[0];
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=recipients.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipients.js","sourceRoot":"","sources":["../../src/edv/recipients.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { Cipher } from '@interop/minimal-cipher';
|
|
2
|
+
import type { IEDVChunk, IEncryptedDocument, IKeyResolver, IRecipientTemplate } from '@interop/data-integrity-core';
|
|
3
|
+
import type { KeyAgreementKey } from './recipients.js';
|
|
4
|
+
/**
|
|
5
|
+
* Encrypt `data` as a stream of chunks for the given recipients, stamping the
|
|
6
|
+
* document `sequence` onto each chunk (as `EdvClientCore._updateStream` does).
|
|
7
|
+
*
|
|
8
|
+
* @param options {object}
|
|
9
|
+
* @param options.cipher {Cipher}
|
|
10
|
+
* @param options.data {Uint8Array}
|
|
11
|
+
* @param options.recipients {IRecipientTemplate[]}
|
|
12
|
+
* @param options.keyResolver {IKeyResolver}
|
|
13
|
+
* @param [options.chunkSize] {number} Bytes per chunk (cipher default 1 MiB).
|
|
14
|
+
* @param options.sequence {number} The owning document's sequence.
|
|
15
|
+
* @returns {Promise<IEDVChunk[]>}
|
|
16
|
+
*/
|
|
17
|
+
export declare function encryptToChunks({ cipher, data, recipients, keyResolver, chunkSize, sequence }: {
|
|
18
|
+
cipher: Cipher;
|
|
19
|
+
data: Uint8Array;
|
|
20
|
+
recipients: IRecipientTemplate[];
|
|
21
|
+
keyResolver: IKeyResolver;
|
|
22
|
+
chunkSize?: number;
|
|
23
|
+
sequence: number;
|
|
24
|
+
}): Promise<IEDVChunk[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Decrypt a document's chunks (in `index` order) back into the original bytes.
|
|
27
|
+
* A wrong key surfaces as a thrown `DataError` from the decrypt transformer.
|
|
28
|
+
*
|
|
29
|
+
* @param options {object}
|
|
30
|
+
* @param options.cipher {Cipher}
|
|
31
|
+
* @param options.chunks {IEDVChunk[]}
|
|
32
|
+
* @param options.keyAgreementKey {KeyAgreementKey}
|
|
33
|
+
* @returns {Promise<Uint8Array>}
|
|
34
|
+
*/
|
|
35
|
+
export declare function decryptChunks({ cipher, chunks, keyAgreementKey }: {
|
|
36
|
+
cipher: Cipher;
|
|
37
|
+
chunks: IEDVChunk[];
|
|
38
|
+
keyAgreementKey: KeyAgreementKey;
|
|
39
|
+
}): Promise<Uint8Array>;
|
|
40
|
+
/**
|
|
41
|
+
* Write a streamed EDV Document as a bundle directory: `document.json` plus
|
|
42
|
+
* `chunks/<index>.jwe.json` for each chunk.
|
|
43
|
+
*
|
|
44
|
+
* @param options {object}
|
|
45
|
+
* @param options.dir {string} The bundle directory path.
|
|
46
|
+
* @param options.document {IEncryptedDocument}
|
|
47
|
+
* @param options.chunks {IEDVChunk[]}
|
|
48
|
+
* @returns {Promise<void>}
|
|
49
|
+
*/
|
|
50
|
+
export declare function writeDocumentBundle({ dir, document, chunks }: {
|
|
51
|
+
dir: string;
|
|
52
|
+
document: IEncryptedDocument;
|
|
53
|
+
chunks: IEDVChunk[];
|
|
54
|
+
}): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Read a bundle directory back into its document envelope and chunks (sorted by
|
|
57
|
+
* `index`).
|
|
58
|
+
*
|
|
59
|
+
* @param options {object}
|
|
60
|
+
* @param options.dir {string} The bundle directory path.
|
|
61
|
+
* @returns {Promise<{document: IEncryptedDocument, chunks: IEDVChunk[]}>}
|
|
62
|
+
*/
|
|
63
|
+
export declare function readDocumentBundle({ dir }: {
|
|
64
|
+
dir: string;
|
|
65
|
+
}): Promise<{
|
|
66
|
+
document: IEncryptedDocument;
|
|
67
|
+
chunks: IEDVChunk[];
|
|
68
|
+
}>;
|
|
69
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/edv/stream.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,KAAK,EACV,SAAS,EACT,kBAAkB,EAElB,YAAY,EACZ,kBAAkB,EACnB,MAAM,8BAA8B,CAAA;AAErC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AA6DtD;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CAAC,EACpC,MAAM,EACN,IAAI,EACJ,UAAU,EACV,WAAW,EACX,SAAS,EACT,QAAQ,EACT,EAAE;IACD,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,EAAE,kBAAkB,EAAE,CAAA;IAChC,WAAW,EAAE,YAAY,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAgBvB;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,EAClC,MAAM,EACN,MAAM,EACN,eAAe,EAChB,EAAE;IACD,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,SAAS,EAAE,CAAA;IACnB,eAAe,EAAE,eAAe,CAAA;CACjC,GAAG,OAAO,CAAC,UAAU,CAAC,CAUtB;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CAAC,EACxC,GAAG,EACH,QAAQ,EACR,MAAM,EACP,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,MAAM,EAAE,SAAS,EAAE,CAAA;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAehB;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,EAAE,GAAG,EAAE,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAC1E,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,MAAM,EAAE,SAAS,EAAE,CAAA;CACpB,CAAC,CA0BD"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chunked-stream support for EDV Documents (Layer 2, Phase 2): encrypt a large
|
|
3
|
+
* input as a sequence of fixed-size encrypted chunks instead of a single JWE,
|
|
4
|
+
* and decrypt the chunks back into the original bytes. A streamed document
|
|
5
|
+
* carries a cleartext `stream: { sequence, chunks }` descriptor; the bytes
|
|
6
|
+
* themselves live in separate chunk JWEs, each `{ sequence, index, offset, jwe }`
|
|
7
|
+
* (`IEDVChunk`), mirroring how an EDV / WAS server stores stream resources apart
|
|
8
|
+
* from the document.
|
|
9
|
+
*
|
|
10
|
+
* On disk the document and its chunks are a **bundle directory** (convention
|
|
11
|
+
* `*.edvdoc/`): `document.json` (the `{ id, sequence, indexed, stream, jwe }`
|
|
12
|
+
* envelope) and `chunks/<index>.jwe.json` (one file per chunk). This keeps the
|
|
13
|
+
* chunks as distinct resources, faithful to the server model.
|
|
14
|
+
*
|
|
15
|
+
* The cipher driving mirrors `@interop/edv-client`'s `_updateStream` /
|
|
16
|
+
* `EdvDocument.getStream` without taking that dependency: it pumps the input
|
|
17
|
+
* through `cipher.createEncryptStream`, stamps the document `sequence` onto each
|
|
18
|
+
* emitted chunk, and feeds chunks back (in `index` order) through
|
|
19
|
+
* `cipher.createDecryptStream`.
|
|
20
|
+
*/
|
|
21
|
+
import { mkdir, readFile, readdir, writeFile } from 'node:fs/promises';
|
|
22
|
+
import { join } from 'node:path';
|
|
23
|
+
import { isEncryptedDocument } from './document.js';
|
|
24
|
+
/** The envelope file within a bundle directory. */
|
|
25
|
+
const BUNDLE_DOCUMENT_FILE = 'document.json';
|
|
26
|
+
/** The subdirectory holding the chunk JWE files within a bundle directory. */
|
|
27
|
+
const BUNDLE_CHUNKS_DIR = 'chunks';
|
|
28
|
+
/**
|
|
29
|
+
* Drain a TransformStream: write each input value, then read every output
|
|
30
|
+
* value. Reads run concurrently with the single write so a large input cannot
|
|
31
|
+
* deadlock against the stream's internal backpressure.
|
|
32
|
+
*
|
|
33
|
+
* @param options {object}
|
|
34
|
+
* @param options.stream {TransformStream}
|
|
35
|
+
* @param options.inputs {unknown[]} Values to write to the writable side.
|
|
36
|
+
* @returns {Promise<T[]>} The values emitted on the readable side.
|
|
37
|
+
*/
|
|
38
|
+
async function pump({ stream, inputs }) {
|
|
39
|
+
const writer = stream.writable.getWriter();
|
|
40
|
+
const reader = stream.readable.getReader();
|
|
41
|
+
const outputs = [];
|
|
42
|
+
const reading = (async () => {
|
|
43
|
+
for (;;) {
|
|
44
|
+
const { value, done } = await reader.read();
|
|
45
|
+
if (done) {
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
outputs.push(value);
|
|
49
|
+
}
|
|
50
|
+
})();
|
|
51
|
+
for (const input of inputs) {
|
|
52
|
+
await writer.write(input);
|
|
53
|
+
}
|
|
54
|
+
await writer.close();
|
|
55
|
+
await reading;
|
|
56
|
+
return outputs;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Concatenate Uint8Array parts into a single buffer.
|
|
60
|
+
*
|
|
61
|
+
* @param parts {Uint8Array[]}
|
|
62
|
+
* @returns {Uint8Array}
|
|
63
|
+
*/
|
|
64
|
+
function concatBytes(parts) {
|
|
65
|
+
const total = parts.reduce((sum, part) => sum + part.byteLength, 0);
|
|
66
|
+
const result = new Uint8Array(total);
|
|
67
|
+
let offset = 0;
|
|
68
|
+
for (const part of parts) {
|
|
69
|
+
result.set(part, offset);
|
|
70
|
+
offset += part.byteLength;
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Encrypt `data` as a stream of chunks for the given recipients, stamping the
|
|
76
|
+
* document `sequence` onto each chunk (as `EdvClientCore._updateStream` does).
|
|
77
|
+
*
|
|
78
|
+
* @param options {object}
|
|
79
|
+
* @param options.cipher {Cipher}
|
|
80
|
+
* @param options.data {Uint8Array}
|
|
81
|
+
* @param options.recipients {IRecipientTemplate[]}
|
|
82
|
+
* @param options.keyResolver {IKeyResolver}
|
|
83
|
+
* @param [options.chunkSize] {number} Bytes per chunk (cipher default 1 MiB).
|
|
84
|
+
* @param options.sequence {number} The owning document's sequence.
|
|
85
|
+
* @returns {Promise<IEDVChunk[]>}
|
|
86
|
+
*/
|
|
87
|
+
export async function encryptToChunks({ cipher, data, recipients, keyResolver, chunkSize, sequence }) {
|
|
88
|
+
const stream = await cipher.createEncryptStream({
|
|
89
|
+
recipients,
|
|
90
|
+
keyResolver,
|
|
91
|
+
chunkSize
|
|
92
|
+
});
|
|
93
|
+
const emitted = await pump({
|
|
94
|
+
stream,
|
|
95
|
+
inputs: [data]
|
|
96
|
+
});
|
|
97
|
+
return emitted.map(chunk => ({
|
|
98
|
+
sequence,
|
|
99
|
+
index: chunk.index,
|
|
100
|
+
offset: chunk.offset,
|
|
101
|
+
jwe: chunk.jwe
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Decrypt a document's chunks (in `index` order) back into the original bytes.
|
|
106
|
+
* A wrong key surfaces as a thrown `DataError` from the decrypt transformer.
|
|
107
|
+
*
|
|
108
|
+
* @param options {object}
|
|
109
|
+
* @param options.cipher {Cipher}
|
|
110
|
+
* @param options.chunks {IEDVChunk[]}
|
|
111
|
+
* @param options.keyAgreementKey {KeyAgreementKey}
|
|
112
|
+
* @returns {Promise<Uint8Array>}
|
|
113
|
+
*/
|
|
114
|
+
export async function decryptChunks({ cipher, chunks, keyAgreementKey }) {
|
|
115
|
+
const ordered = [...chunks].sort((first, second) => first.index - second.index);
|
|
116
|
+
const stream = await cipher.createDecryptStream({ keyAgreementKey });
|
|
117
|
+
const parts = await pump({
|
|
118
|
+
stream,
|
|
119
|
+
inputs: ordered.map(chunk => ({ jwe: chunk.jwe }))
|
|
120
|
+
});
|
|
121
|
+
return concatBytes(parts);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Write a streamed EDV Document as a bundle directory: `document.json` plus
|
|
125
|
+
* `chunks/<index>.jwe.json` for each chunk.
|
|
126
|
+
*
|
|
127
|
+
* @param options {object}
|
|
128
|
+
* @param options.dir {string} The bundle directory path.
|
|
129
|
+
* @param options.document {IEncryptedDocument}
|
|
130
|
+
* @param options.chunks {IEDVChunk[]}
|
|
131
|
+
* @returns {Promise<void>}
|
|
132
|
+
*/
|
|
133
|
+
export async function writeDocumentBundle({ dir, document, chunks }) {
|
|
134
|
+
const chunksDir = join(dir, BUNDLE_CHUNKS_DIR);
|
|
135
|
+
await mkdir(chunksDir, { recursive: true });
|
|
136
|
+
await writeFile(join(dir, BUNDLE_DOCUMENT_FILE), `${JSON.stringify(document, null, 2)}\n`, 'utf8');
|
|
137
|
+
for (const chunk of chunks) {
|
|
138
|
+
await writeFile(join(chunksDir, `${chunk.index}.jwe.json`), `${JSON.stringify(chunk, null, 2)}\n`, 'utf8');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Read a bundle directory back into its document envelope and chunks (sorted by
|
|
143
|
+
* `index`).
|
|
144
|
+
*
|
|
145
|
+
* @param options {object}
|
|
146
|
+
* @param options.dir {string} The bundle directory path.
|
|
147
|
+
* @returns {Promise<{document: IEncryptedDocument, chunks: IEDVChunk[]}>}
|
|
148
|
+
*/
|
|
149
|
+
export async function readDocumentBundle({ dir }) {
|
|
150
|
+
let document;
|
|
151
|
+
try {
|
|
152
|
+
document = JSON.parse(await readFile(join(dir, BUNDLE_DOCUMENT_FILE), 'utf8'));
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
throw new Error(`Could not read ${BUNDLE_DOCUMENT_FILE} in bundle "${dir}": ${err.message}`, { cause: err });
|
|
156
|
+
}
|
|
157
|
+
if (!isEncryptedDocument(document)) {
|
|
158
|
+
throw new Error(`Bundle "${dir}" does not contain an EDV Document.`);
|
|
159
|
+
}
|
|
160
|
+
const chunksDir = join(dir, BUNDLE_CHUNKS_DIR);
|
|
161
|
+
const names = (await readdir(chunksDir).catch(() => [])).filter(name => name.endsWith('.jwe.json'));
|
|
162
|
+
const chunks = [];
|
|
163
|
+
for (const name of names) {
|
|
164
|
+
chunks.push(JSON.parse(await readFile(join(chunksDir, name), 'utf8')));
|
|
165
|
+
}
|
|
166
|
+
chunks.sort((first, second) => first.index - second.index);
|
|
167
|
+
return { document, chunks };
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/edv/stream.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { Command } from 'commander';
|
|
4
4
|
import { makeDidCommand } from './commands/did.js';
|
|
5
|
+
import { makeEdvCommand } from './commands/edv.js';
|
|
5
6
|
import { makeKeyCommand } from './commands/key.js';
|
|
6
7
|
import { makeVcCommand } from './commands/vc.js';
|
|
7
8
|
import { makeWalletCommand } from './commands/wallet.js';
|
|
@@ -11,6 +12,7 @@ const { version } = createRequire(import.meta.url)('../package.json');
|
|
|
11
12
|
const program = new Command();
|
|
12
13
|
program.name('di').description('DID CLI tool').version(version);
|
|
13
14
|
program.addCommand(makeDidCommand());
|
|
15
|
+
program.addCommand(makeEdvCommand());
|
|
14
16
|
program.addCommand(makeKeyCommand());
|
|
15
17
|
program.addCommand(makeVcCommand());
|
|
16
18
|
program.addCommand(makeWalletCommand());
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAEnE,CAAA;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AAE/D,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAA;AACnC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAA;AACvC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAA;AAErC,OAAO,CAAC,KAAK,EAAE,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAEnE,CAAA;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AAE/D,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAA;AACnC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAA;AACvC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAA;AAErC,OAAO,CAAC,KAAK,EAAE,CAAA"}
|
package/dist/meta.d.ts
CHANGED
package/dist/meta.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EASL,KAAK,WAAW,EACjB,MAAM,cAAc,CAAA;AAErB;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IACvE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAQA;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAsB5E;AAED;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAAC,EAC5C,kBAAkB,EAClB,GAAG,EACJ,EAAE;IACD,kBAAkB,EAAE,MAAM,CAAA;IAC1B,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB;AAED;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAAC,EAC5C,kBAAkB,EAClB,GAAG,EACJ,EAAE;IACD,kBAAkB,EAAE,MAAM,CAAA;IAC1B,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBhB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,EAClC,GAAG,EACJ,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAsB9B;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,EAAE,GAAG,EAAE,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CACnE;IACE,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB,GACD,SAAS,CACZ,CAkCA;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,GAAG,EAAE,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CACzE;IACE,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,gBAAgB,CAAA;IAC5B,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB,GACD,SAAS,CACZ,CAmDA;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,EAAE,GAAG,EAAE,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAClE;IACE,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"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"}
|
package/dist/meta.js
CHANGED
|
@@ -16,7 +16,7 @@ import { findStoredKey, listCollection, listDids, loadDidDocument, loadDidMeta,
|
|
|
16
16
|
* @returns {{date?: string, type?: string, curve?: string}}
|
|
17
17
|
*/
|
|
18
18
|
export function parseKeyStorageId({ storageId }) {
|
|
19
|
-
const match = storageId.match(/^(\d{4}-\d{2}-\d{2})-(ed25519|ecdsa|x25519)(?:-(p\d{3}))?-/);
|
|
19
|
+
const match = storageId.match(/^(\d{4}-\d{2}-\d{2})-(ed25519|ecdsa|x25519|hmac)(?:-(p\d{3}))?-/);
|
|
20
20
|
if (!match) {
|
|
21
21
|
return {};
|
|
22
22
|
}
|
package/dist/meta.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,aAAa,EACb,cAAc,EACd,QAAQ,EACR,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EAErB,MAAM,cAAc,CAAA;AAErB;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAE,SAAS,EAAyB;IAKpE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAC3B,
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"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"}
|
package/dist/storage.d.ts
CHANGED
|
@@ -89,11 +89,12 @@ export declare function removeFromCollection({ collection, storageId }: {
|
|
|
89
89
|
storageId: string;
|
|
90
90
|
}): Promise<string[]>;
|
|
91
91
|
/**
|
|
92
|
-
* Find a stored wallet key by its publicKeyMultibase fingerprint.
|
|
92
|
+
* Find a stored wallet key by its publicKeyMultibase fingerprint or its key id.
|
|
93
93
|
*
|
|
94
|
-
*
|
|
95
|
-
* may encode a full verification method id), so the lookup scans every key
|
|
96
|
-
*
|
|
94
|
+
* Neither identifier is the file name (storage IDs carry a date/type prefix and
|
|
95
|
+
* may encode a full verification method id), so the lookup scans every key file
|
|
96
|
+
* in the collection. Matching by `id` lets symmetric keys with no public
|
|
97
|
+
* fingerprint (e.g. an HMAC key) be resolved.
|
|
97
98
|
*
|
|
98
99
|
* @param options {object}
|
|
99
100
|
* @param options.fingerprint {string}
|
|
@@ -104,6 +105,7 @@ export declare function findStoredKey({ fingerprint }: {
|
|
|
104
105
|
}): Promise<{
|
|
105
106
|
storageId: string;
|
|
106
107
|
key: {
|
|
108
|
+
id?: string;
|
|
107
109
|
publicKeyMultibase?: string;
|
|
108
110
|
secretKeyMultibase?: string;
|
|
109
111
|
};
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAYA;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAe1E;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,GAAG,OAAO,EAClD,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,CAAC,CAGZ;AAED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,UAAU,EACV,SAAS,EACV,EAAE;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAUnC;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,EACzC,UAAU,EACV,SAAS,EACT,IAAI,EACL,EAAE;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,WAAW,CAAA;CAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CAMlB;AAoBD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,EACzC,UAAU,EACV,SAAS,EACV,EAAE;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAWpB;AAED
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|