@did-btcr2/method 0.59.0 → 0.60.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/.tsbuildinfo +1 -1
- package/dist/browser.js +3 -3
- package/dist/browser.mjs +3 -3
- package/dist/cjs/index.js +917 -770
- package/dist/esm/core/identifier.js +175 -23
- package/dist/esm/core/identifier.js.map +1 -1
- package/dist/types/core/identifier.d.ts +67 -0
- package/dist/types/core/identifier.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/core/identifier.ts +267 -22
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
import { BitcoinNetworkNames, IdentifierError, IdentifierTypes, INVALID_DID, METHOD_NOT_SUPPORTED } from '@did-btcr2/common';
|
|
1
|
+
import { BitcoinNetworkNames, canonicalHashBytes, IdentifierError, IdentifierTypes, INVALID_DID, METHOD_NOT_SUPPORTED } from '@did-btcr2/common';
|
|
2
2
|
import { CompressedSecp256k1PublicKey, SchnorrKeyPair } from '@did-btcr2/keypair';
|
|
3
|
-
import {
|
|
3
|
+
import { equalBytes } from '@noble/curves/utils.js';
|
|
4
|
+
import { bech32m, hex } from '@scure/base';
|
|
5
|
+
// did-document.js imports this module. Both modules use the other only inside a
|
|
6
|
+
// method body, never at module evaluation, so the cycle is safe in ESM and CJS.
|
|
7
|
+
import { GenesisDocument, ID_PLACEHOLDER_VALUE } from '../utils/did-document.js';
|
|
4
8
|
;
|
|
9
|
+
/** The prefix of every did:btcr2 identifier. */
|
|
10
|
+
const DID_PREFIX = 'did:btcr2:';
|
|
5
11
|
/**
|
|
6
12
|
* Implements {@link https://dcdpr.github.io/did-btcr2/#syntax | 3 Syntax}.
|
|
7
13
|
* A did:btcr2 DID consists of a did:btcr2 prefix, followed by an id-bech32 value, which is a Bech32m encoding of:
|
|
@@ -70,7 +76,7 @@ export class Identifier {
|
|
|
70
76
|
// byte, then append genesisBytes. Bech32m-encode the result.
|
|
71
77
|
const firstByte = ((version - 1) << 4) | networkValue;
|
|
72
78
|
const dataBytes = new Uint8Array([firstByte, ...genesisBytes]);
|
|
73
|
-
return
|
|
79
|
+
return `${DID_PREFIX}${bech32m.encodeFromBytes(hrp, dataBytes)}`;
|
|
74
80
|
}
|
|
75
81
|
/**
|
|
76
82
|
* Implements {@link https://dcdpr.github.io/did-btcr2/#didbtcr2-identifier-decoding | 3.3 did:btcr2 Identifier Decoding}.
|
|
@@ -100,19 +106,24 @@ export class Identifier {
|
|
|
100
106
|
if (!encoded) {
|
|
101
107
|
throw new IdentifierError(`Invalid method-specific id: ${identifier}`, INVALID_DID, { identifier });
|
|
102
108
|
}
|
|
103
|
-
// 6.
|
|
109
|
+
// 6. The method-specific id MUST be lowercase. A Bech32m decoder accepts an all-uppercase
|
|
110
|
+
// string, so this check runs before the Bech32m step.
|
|
111
|
+
if (encoded !== encoded.toLowerCase()) {
|
|
112
|
+
throw new IdentifierError(`Invalid method-specific id (must be lowercase): ${identifier}`, INVALID_DID, { identifier });
|
|
113
|
+
}
|
|
114
|
+
// 7. Bech32m-decode the id into its hrp and dataBytes.
|
|
104
115
|
const { prefix: hrp, bytes: dataBytes } = bech32m.decodeToBytes(encoded);
|
|
105
|
-
//
|
|
116
|
+
// 8. The hrp MUST be "k" (KEY) or "x" (EXTERNAL).
|
|
106
117
|
if (!['x', 'k'].includes(hrp)) {
|
|
107
118
|
throw new IdentifierError(`Invalid hrp: ${hrp}`, INVALID_DID, { identifier });
|
|
108
119
|
}
|
|
109
|
-
//
|
|
120
|
+
// 9. There MUST be at least one byte to read btcr2_version and network_value from.
|
|
110
121
|
if (!dataBytes || dataBytes.length < 1) {
|
|
111
122
|
throw new IdentifierError(`Failed to decode id: ${encoded}`, INVALID_DID, { identifier });
|
|
112
123
|
}
|
|
113
|
-
//
|
|
124
|
+
// 10. Map hrp to idType.
|
|
114
125
|
const idType = hrp === 'k' ? 'KEY' : 'EXTERNAL';
|
|
115
|
-
//
|
|
126
|
+
// 11. btcr2_version is the high nibble of the first byte and MUST be 0, which is version_number 1.
|
|
116
127
|
// The version-extension scheme (a leading nibble of 0xF chaining into further bytes) is reserved
|
|
117
128
|
// and not valid under v1, so any non-zero high nibble (0x1 through 0xF) is a malformed or forged
|
|
118
129
|
// identifier and is rejected here. Reading a single flat nibble (rather than looping on 0xF) is
|
|
@@ -123,23 +134,18 @@ export class Identifier {
|
|
|
123
134
|
throw new IdentifierError(`Invalid btcr2_version (expected 0): ${btcr2Version}`, INVALID_DID, { identifier });
|
|
124
135
|
}
|
|
125
136
|
const version = 1;
|
|
126
|
-
//
|
|
127
|
-
//
|
|
137
|
+
// 12. network_value is the low nibble of the first byte. 0-5 map to named networks. 6-11 are
|
|
138
|
+
// reserved. 12-15 are custom networks; this implementation supports no custom network, so the
|
|
139
|
+
// decoder rejects them, as the specification recommends (ADR 107).
|
|
128
140
|
const networkValue = dataBytes[0] & 0x0F;
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
network
|
|
133
|
-
}
|
|
134
|
-
else if (networkValue >= 12 && networkValue <= 14) {
|
|
135
|
-
network = networkValue - 11;
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
throw new IdentifierError(`Invalid network: ${networkValue}`, INVALID_DID, { identifier });
|
|
141
|
+
const network = BitcoinNetworkNames[networkValue];
|
|
142
|
+
if (typeof network !== 'string') {
|
|
143
|
+
const reason = networkValue >= 12 ? 'custom network not supported' : 'reserved';
|
|
144
|
+
throw new IdentifierError(`Invalid network (${reason}): ${networkValue}`, INVALID_DID, { identifier });
|
|
139
145
|
}
|
|
140
|
-
//
|
|
146
|
+
// 13. genesisBytes is everything after the first byte.
|
|
141
147
|
const genesisBytes = dataBytes.slice(1);
|
|
142
|
-
//
|
|
148
|
+
// 14. genesisBytes MUST match the identifier type: a valid compressed secp256k1 public key for KEY,
|
|
143
149
|
// or a 32-byte hash for EXTERNAL.
|
|
144
150
|
if (idType === 'KEY') {
|
|
145
151
|
try {
|
|
@@ -152,9 +158,155 @@ export class Identifier {
|
|
|
152
158
|
else if (genesisBytes.length !== 32) {
|
|
153
159
|
throw new IdentifierError(`Invalid genesisBytes: ${genesisBytes}`, INVALID_DID, { identifier });
|
|
154
160
|
}
|
|
155
|
-
//
|
|
161
|
+
// 15. Return idType, hrp, version, network, and genesisBytes.
|
|
156
162
|
return { idType, hrp, version, network, genesisBytes };
|
|
157
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Validates that a did:btcr2 identifier conforms to
|
|
166
|
+
* {@link https://dcdpr.github.io/did-btcr2/#didbtcr2-identifier-decoding | 3.3 did:btcr2 Identifier Decoding}
|
|
167
|
+
* and returns a report of the checks. The method does not throw on an invalid identifier.
|
|
168
|
+
*
|
|
169
|
+
* The checks run in this order: `prefix`, `lowercase`, `bech32m`, `version`, `network`,
|
|
170
|
+
* `genesisBytes`, `roundTrip`, `genesisBytesMatch`, and `genesisDocument`. The run stops at the
|
|
171
|
+
* first failed check. The `network` check accepts a named network only: a reserved value (6 to
|
|
172
|
+
* 11) and a custom value (12 to 15) fail, because this implementation supports no custom network.
|
|
173
|
+
* The `genesisBytesMatch` check runs only if `options.genesisBytes` is present: the supplied bytes
|
|
174
|
+
* must equal the genesis bytes of the identifier, for a KEY or an EXTERNAL identifier. The
|
|
175
|
+
* `genesisDocument` check runs only if `options.genesisDocument` is present. For an EXTERNAL
|
|
176
|
+
* identifier it confirms that the document is a valid Genesis Document and that its canonical
|
|
177
|
+
* SHA-256 hash equals the genesis bytes. For a KEY identifier it fails.
|
|
178
|
+
*
|
|
179
|
+
* @param {string} identifier The did:btcr2 identifier to validate.
|
|
180
|
+
* @param {IdentifierValidateOptions} [options] The validation options.
|
|
181
|
+
* @returns {IdentifierReport} The report. See {@link IdentifierReport} for details.
|
|
182
|
+
*/
|
|
183
|
+
static validate(identifier, options = {}) {
|
|
184
|
+
const checks = [];
|
|
185
|
+
const pass = (name, detail) => {
|
|
186
|
+
checks.push(detail === undefined ? { name, ok: true } : { name, ok: true, detail });
|
|
187
|
+
};
|
|
188
|
+
const fail = (name, detail, partial = {}) => {
|
|
189
|
+
checks.push({ name, ok: false, detail });
|
|
190
|
+
return { did: identifier, valid: false, ...partial, checks };
|
|
191
|
+
};
|
|
192
|
+
// prefix: the string is "did:btcr2:" followed by a non-empty method-specific id.
|
|
193
|
+
if (typeof identifier !== 'string') {
|
|
194
|
+
return fail('prefix', 'The identifier is not a string.');
|
|
195
|
+
}
|
|
196
|
+
const parts = identifier.split(':');
|
|
197
|
+
if (parts.length !== 3 || parts[0] !== 'did' || parts[1] !== 'btcr2') {
|
|
198
|
+
return fail('prefix', `The identifier must be "${DID_PREFIX}" followed by the method-specific id.`);
|
|
199
|
+
}
|
|
200
|
+
const encoded = parts[2];
|
|
201
|
+
if (encoded.length === 0) {
|
|
202
|
+
return fail('prefix', 'The method-specific id is empty.');
|
|
203
|
+
}
|
|
204
|
+
pass('prefix');
|
|
205
|
+
// lowercase: the method-specific id is lowercase.
|
|
206
|
+
if (encoded !== encoded.toLowerCase()) {
|
|
207
|
+
return fail('lowercase', 'The method-specific id must be lowercase.');
|
|
208
|
+
}
|
|
209
|
+
pass('lowercase');
|
|
210
|
+
// bech32m: the id decodes, the hrp is "k" or "x", and the data bytes are not empty.
|
|
211
|
+
let hrp;
|
|
212
|
+
let dataBytes;
|
|
213
|
+
try {
|
|
214
|
+
({ prefix: hrp, bytes: dataBytes } = bech32m.decodeToBytes(encoded));
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
return fail('bech32m', `Bech32m decoding failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
218
|
+
}
|
|
219
|
+
if (hrp !== 'k' && hrp !== 'x') {
|
|
220
|
+
return fail('bech32m', `The hrp must be "k" or "x", got "${hrp}".`);
|
|
221
|
+
}
|
|
222
|
+
const idType = hrp === 'k' ? IdentifierTypes.KEY : IdentifierTypes.EXTERNAL;
|
|
223
|
+
if (dataBytes.length < 1) {
|
|
224
|
+
return fail('bech32m', 'The data bytes are empty.', { idType });
|
|
225
|
+
}
|
|
226
|
+
pass('bech32m', `hrp "${hrp}", ${dataBytes.length} data bytes`);
|
|
227
|
+
// version: btcr2_version (the high nibble of the first byte) is 0.
|
|
228
|
+
const btcr2Version = dataBytes[0] >>> 4;
|
|
229
|
+
if (btcr2Version !== 0) {
|
|
230
|
+
return fail('version', `btcr2_version must be 0, got ${btcr2Version}.`, { idType });
|
|
231
|
+
}
|
|
232
|
+
pass('version', 'btcr2_version 0 (version_number 1)');
|
|
233
|
+
// network: network_value (the low nibble of the first byte) names a network.
|
|
234
|
+
const networkValue = dataBytes[0] & 0x0F;
|
|
235
|
+
const network = BitcoinNetworkNames[networkValue];
|
|
236
|
+
if (typeof network !== 'string') {
|
|
237
|
+
const detail = networkValue >= 12
|
|
238
|
+
? `network_value ${networkValue} is a custom network, not supported by this implementation.`
|
|
239
|
+
: `network_value ${networkValue} is reserved.`;
|
|
240
|
+
return fail('network', detail, { idType });
|
|
241
|
+
}
|
|
242
|
+
pass('network', `network_value ${networkValue} (${network})`);
|
|
243
|
+
// genesisBytes: a 33-byte SEC compressed secp256k1 public key (KEY) or a 32-byte hash (EXTERNAL).
|
|
244
|
+
const genesisBytes = dataBytes.slice(1);
|
|
245
|
+
if (idType === IdentifierTypes.KEY) {
|
|
246
|
+
try {
|
|
247
|
+
new CompressedSecp256k1PublicKey(genesisBytes);
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
return fail('genesisBytes', `Expected a 33-byte SEC compressed secp256k1 public key, got ${genesisBytes.length} bytes that are not a valid key.`, { idType, network });
|
|
251
|
+
}
|
|
252
|
+
pass('genesisBytes', '33-byte SEC compressed secp256k1 public key');
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
if (genesisBytes.length !== 32) {
|
|
256
|
+
return fail('genesisBytes', `Expected a 32-byte SHA-256 hash, got ${genesisBytes.length} bytes.`, { idType, network });
|
|
257
|
+
}
|
|
258
|
+
pass('genesisBytes', '32-byte SHA-256 hash');
|
|
259
|
+
}
|
|
260
|
+
// roundTrip: encoding the decoded components reproduces the identifier.
|
|
261
|
+
let reEncoded;
|
|
262
|
+
try {
|
|
263
|
+
reEncoded = Identifier.encode(genesisBytes, { idType, version: 1, network: network });
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
return fail('roundTrip', `Re-encoding failed: ${error instanceof Error ? error.message : String(error)}`, { idType, network });
|
|
267
|
+
}
|
|
268
|
+
if (reEncoded !== identifier) {
|
|
269
|
+
return fail('roundTrip', `Re-encoding produced "${reEncoded}".`, { idType, network });
|
|
270
|
+
}
|
|
271
|
+
pass('roundTrip');
|
|
272
|
+
// genesisBytesMatch: only if the caller supplied genesis bytes.
|
|
273
|
+
if (options.genesisBytes !== undefined) {
|
|
274
|
+
const supplied = options.genesisBytes;
|
|
275
|
+
if (!(supplied instanceof Uint8Array)) {
|
|
276
|
+
return fail('genesisBytesMatch', 'The supplied genesis bytes are not a Uint8Array.', { idType, network });
|
|
277
|
+
}
|
|
278
|
+
if (supplied.length !== genesisBytes.length) {
|
|
279
|
+
return fail('genesisBytesMatch', `Expected ${genesisBytes.length} genesis bytes for a ${idType} identifier, got ${supplied.length}.`, { idType, network });
|
|
280
|
+
}
|
|
281
|
+
if (!equalBytes(supplied, genesisBytes)) {
|
|
282
|
+
return fail('genesisBytesMatch', `The supplied genesis bytes ${hex.encode(supplied)} do not equal the genesis bytes of the identifier ${hex.encode(genesisBytes)}.`, { idType, network });
|
|
283
|
+
}
|
|
284
|
+
pass('genesisBytesMatch', 'The supplied genesis bytes equal the genesis bytes of the identifier.');
|
|
285
|
+
}
|
|
286
|
+
// genesisDocument: only if the caller supplied a document.
|
|
287
|
+
if (options.genesisDocument !== undefined) {
|
|
288
|
+
const document = options.genesisDocument;
|
|
289
|
+
if (idType === IdentifierTypes.KEY) {
|
|
290
|
+
return fail('genesisDocument', 'A KEY identifier has no genesis document.', { idType, network });
|
|
291
|
+
}
|
|
292
|
+
const id = document.id;
|
|
293
|
+
if (id !== ID_PLACEHOLDER_VALUE) {
|
|
294
|
+
return fail('genesisDocument', `The genesis document id must be "${ID_PLACEHOLDER_VALUE}", got ${JSON.stringify(id)}.`, { idType, network });
|
|
295
|
+
}
|
|
296
|
+
try {
|
|
297
|
+
GenesisDocument.fromJSON(document);
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
return fail('genesisDocument', `Invalid genesis document: ${error instanceof Error ? error.message : String(error)}`, { idType, network });
|
|
301
|
+
}
|
|
302
|
+
const documentHash = canonicalHashBytes(document);
|
|
303
|
+
if (!equalBytes(documentHash, genesisBytes)) {
|
|
304
|
+
return fail('genesisDocument', `The genesis document hash ${hex.encode(documentHash)} does not equal the genesis bytes ${hex.encode(genesisBytes)}.`, { idType, network });
|
|
305
|
+
}
|
|
306
|
+
pass('genesisDocument', 'The genesis document hashes to the genesis bytes.');
|
|
307
|
+
}
|
|
308
|
+
return { did: identifier, valid: true, idType, network, checks };
|
|
309
|
+
}
|
|
158
310
|
/**
|
|
159
311
|
* Generates a new did:btcr2 identifier based on a newly generated key pair.
|
|
160
312
|
* @returns {string} The new did:btcr2 identifier.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../../src/core/identifier.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../../src/core/identifier.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,WAAW,EACX,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,4BAA4B,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAE3C,gFAAgF;AAChF,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAUhF,CAAC;AA4EF,gDAAgD;AAChD,MAAM,UAAU,GAAG,YAAY,CAAC;AAEhC;;;;;;;;;;GAUG;AACH,MAAM,OAAO,UAAU;IACrB;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,MAAM,CAAC,YAAsC,EAAE,OAAyB;QAC7E,wGAAwG;QACxG,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC;QAE7D,sCAAsC;QACtC,IAAI,CAAC,CAAC,MAAM,IAAI,eAAe,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,eAAe,CAAC,6CAA6C,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACpG,CAAC;QAED,iGAAiG;QACjG,mGAAmG;QACnG,kEAAkE;QAClE,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YAClB,MAAM,IAAI,eAAe,CAAC,4BAA4B,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,gGAAgG;QAChG,kGAAkG;QAClG,8FAA8F;QAC9F,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,eAAe,CAAC,+CAA+C,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACvG,CAAC;QACD,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAA2C,CAAuB,CAAC;QAC5G,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,eAAe,CAAC,wBAAwB,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,gGAAgG;QAChG,gGAAgG;QAChG,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,IAAI,4BAA4B,CAAC,YAAY,CAAC,CAAC;YACjD,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,eAAe,CACvB,uEAAuE,EACvE,WAAW,EAAE,EAAE,YAAY,EAAE,CAC9B,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,YAAY,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,eAAe,CACvB,uEAAuE,EACvE,WAAW,EAAE,EAAE,YAAY,EAAE,CAC9B,CAAC;QACJ,CAAC;QAED,sEAAsE;QACtE,MAAM,GAAG,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAEzC,oGAAoG;QACpG,6DAA6D;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC;QACtD,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,CAAC,SAAS,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC;QAC/D,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;IACnE,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,CAAC,UAAkB;QAC9B,sFAAsF;QACtF,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEzC,6DAA6D;QAC7D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAC,CAAC;YAC3B,MAAM,IAAI,eAAe,CAAC,gBAAgB,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC;QAE7C,+BAA+B;QAC/B,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,MAAM,IAAI,eAAe,CAAC,gBAAgB,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,iCAAiC;QACjC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,eAAe,CAAC,uBAAuB,MAAM,EAAE,EAAE,oBAAoB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACnG,CAAC;QAED,6CAA6C;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,eAAe,CAAC,+BAA+B,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACtG,CAAC;QAED,0FAA0F;QAC1F,yDAAyD;QACzD,IAAI,OAAO,KAAK,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,eAAe,CAAC,mDAAmD,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1H,CAAC;QAED,uDAAuD;QACvD,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAEzE,kDAAkD;QAClD,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,eAAe,CAAC,gBAAgB,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,mFAAmF;QACnF,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,eAAe,CAAC,wBAAwB,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5F,CAAC;QAED,yBAAyB;QACzB,MAAM,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;QAEhD,mGAAmG;QACnG,qGAAqG;QACrG,qGAAqG;QACrG,oGAAoG;QACpG,oGAAoG;QACpG,2DAA2D;QAC3D,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,eAAe,CAAC,uCAAuC,YAAY,EAAE,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAChH,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,CAAC;QAElB,6FAA6F;QAC7F,kGAAkG;QAClG,uEAAuE;QACvE,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACzC,MAAM,OAAO,GAAG,mBAAmB,CAAC,YAAY,CAAuB,CAAC;QACxE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,UAAU,CAAC;YAChF,MAAM,IAAI,eAAe,CAAC,oBAAoB,MAAM,MAAM,YAAY,EAAE,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACzG,CAAC;QAED,uDAAuD;QACvD,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAExC,oGAAoG;QACpG,sCAAsC;QACtC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,IAAI,4BAA4B,CAAC,YAAY,CAAC,CAAC;YACjD,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,eAAe,CAAC,yBAAyB,YAAY,EAAE,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YAClG,CAAC;QACH,CAAC;aAAM,IAAI,YAAY,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,eAAe,CAAC,yBAAyB,YAAY,EAAE,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAClG,CAAC;QAED,8DAA8D;QAC9D,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAmB,CAAC;IAC1E,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,QAAQ,CAAC,UAAkB,EAAE,UAAqC,EAAE;QACzE,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,CAAC,IAAyB,EAAE,MAAe,EAAQ,EAAE;YAChE,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACtF,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,IAAyB,EAAE,MAAc,EAAE,UAAqC,EAAE,EAAoB,EAAE;YACpH,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACzC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC;QAC/D,CAAC,CAAC;QAEF,iFAAiF;QACjF,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,QAAQ,EAAE,iCAAiC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YACrE,OAAO,IAAI,CAAC,QAAQ,EAAE,2BAA2B,UAAU,uCAAuC,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,QAAQ,EAAE,kCAAkC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEf,kDAAkD;QAClD,IAAI,OAAO,KAAK,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,WAAW,EAAE,2CAA2C,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,CAAC;QAElB,oFAAoF;QACpF,IAAI,GAAW,CAAC;QAChB,IAAI,SAAqB,CAAC;QAC1B,IAAI,CAAC;YACH,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,SAAS,EAAE,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/G,CAAC;QACD,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,SAAS,EAAE,oCAAoC,GAAG,IAAI,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC;QAC5E,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,SAAS,EAAE,2BAA2B,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,aAAa,CAAC,CAAC;QAEhE,mEAAmE;QACnE,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,SAAS,EAAE,gCAAgC,YAAY,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;QAEtD,6EAA6E;QAC7E,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACzC,MAAM,OAAO,GAAG,mBAAmB,CAAC,YAAY,CAAuB,CAAC;QACxE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,YAAY,IAAI,EAAE;gBAC/B,CAAC,CAAC,iBAAiB,YAAY,6DAA6D;gBAC5F,CAAC,CAAC,iBAAiB,YAAY,eAAe,CAAC;YACjD,OAAO,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,iBAAiB,YAAY,KAAK,OAAO,GAAG,CAAC,CAAC;QAE9D,kGAAkG;QAClG,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,MAAM,KAAK,eAAe,CAAC,GAAG,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,IAAI,4BAA4B,CAAC,YAAY,CAAC,CAAC;YACjD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CACT,cAAc,EACd,+DAA+D,YAAY,CAAC,MAAM,kCAAkC,EACpH,EAAE,MAAM,EAAE,OAAO,EAAE,CACpB,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,cAAc,EAAE,6CAA6C,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,IAAI,YAAY,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAC,cAAc,EAAE,wCAAwC,YAAY,CAAC,MAAM,SAAS,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACzH,CAAC;YACD,IAAI,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;QAC/C,CAAC;QAED,wEAAwE;QACxE,IAAI,SAAiB,CAAC;QACtB,IAAI,CAAC;YACH,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAsC,EAAE,CAAC,CAAC;QACvH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,WAAW,EAAE,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACjI,CAAC;QACD,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,WAAW,EAAE,yBAAyB,SAAS,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,CAAC;QAElB,gEAAgE;QAChE,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;YACtC,IAAI,CAAC,CAAC,QAAQ,YAAY,UAAU,CAAC,EAAE,CAAC;gBACtC,OAAO,IAAI,CAAC,mBAAmB,EAAE,kDAAkD,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5G,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;gBAC5C,OAAO,IAAI,CACT,mBAAmB,EACnB,YAAY,YAAY,CAAC,MAAM,wBAAwB,MAAM,oBAAoB,QAAQ,CAAC,MAAM,GAAG,EACnG,EAAE,MAAM,EAAE,OAAO,EAAE,CACpB,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC;gBACxC,OAAO,IAAI,CACT,mBAAmB,EACnB,8BAA8B,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,qDAAqD,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAClI,EAAE,MAAM,EAAE,OAAO,EAAE,CACpB,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,mBAAmB,EAAE,uEAAuE,CAAC,CAAC;QACrG,CAAC;QAED,2DAA2D;QAC3D,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;YACzC,IAAI,MAAM,KAAK,eAAe,CAAC,GAAG,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC,iBAAiB,EAAE,2CAA2C,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACnG,CAAC;YACD,MAAM,EAAE,GAAI,QAA6B,CAAC,EAAE,CAAC;YAC7C,IAAI,EAAE,KAAK,oBAAoB,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC,iBAAiB,EAAE,oCAAoC,oBAAoB,UAAU,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/I,CAAC;YACD,IAAI,CAAC;gBACH,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,iBAAiB,EAAE,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YAC7I,CAAC;YACD,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;gBAC5C,OAAO,IAAI,CACT,iBAAiB,EACjB,6BAA6B,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,qCAAqC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EACrH,EAAE,MAAM,EAAE,OAAO,EAAE,CACpB,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,iBAAiB,EAAE,mDAAmD,CAAC,CAAC;QAC/E,CAAC;QAED,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IACnE,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,QAAQ;QACb,MAAM,OAAO,GAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,EAClD;YACE,MAAM,EAAS,KAAK;YACpB,OAAO,EAAQ,CAAC;YAChB,OAAO,EAAQ,SAAS;SACzB,CACF,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC;IAChD,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,GAAW;QAC7B,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxD,IAAG,MAAM,KAAK,KAAK,EAAE,CAAC;YACpB,MAAM,IAAI,eAAe,CACvB,gDAAgD,GAAG,2DAA2D,EAC9G,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAC7B,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,4BAA4B,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,UAAkB;QAC/B,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Bytes, DocumentBytes, KeyBytes, SchnorrKeyPairObject } from '@did-btcr2/common';
|
|
2
|
+
import { IdentifierTypes } from '@did-btcr2/common';
|
|
2
3
|
import { CompressedSecp256k1PublicKey } from '@did-btcr2/keypair';
|
|
3
4
|
import type { DidCreateOptions } from '../did-btcr2.js';
|
|
4
5
|
/**
|
|
@@ -24,6 +25,52 @@ export interface IdentifierComponents {
|
|
|
24
25
|
network: string;
|
|
25
26
|
genesisBytes: Bytes;
|
|
26
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* The name of one check that {@link Identifier.validate} runs. The names are in run order.
|
|
30
|
+
* @typedef {string} IdentifierCheckName
|
|
31
|
+
*/
|
|
32
|
+
export type IdentifierCheckName = 'prefix' | 'lowercase' | 'bech32m' | 'version' | 'network' | 'genesisBytes' | 'roundTrip' | 'genesisBytesMatch' | 'genesisDocument';
|
|
33
|
+
/**
|
|
34
|
+
* The result of one check that {@link Identifier.validate} ran.
|
|
35
|
+
* @interface IdentifierCheck
|
|
36
|
+
* @property {IdentifierCheckName} name The name of the check.
|
|
37
|
+
* @property {boolean} ok True if the check passed.
|
|
38
|
+
* @property {string} [detail] What the check found.
|
|
39
|
+
*/
|
|
40
|
+
export interface IdentifierCheck {
|
|
41
|
+
name: IdentifierCheckName;
|
|
42
|
+
ok: boolean;
|
|
43
|
+
detail?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Options for {@link Identifier.validate}.
|
|
47
|
+
* @interface IdentifierValidateOptions
|
|
48
|
+
* @property {Bytes} [genesisBytes] The genesis bytes that the identifier must encode: the 33-byte
|
|
49
|
+
* compressed public key of a KEY identifier, or the 32-byte genesis document hash of an EXTERNAL
|
|
50
|
+
* identifier. If present, the report includes the `genesisBytesMatch` check.
|
|
51
|
+
* @property {object} [genesisDocument] The genesis document of an EXTERNAL identifier.
|
|
52
|
+
* If present, the report includes the `genesisDocument` check.
|
|
53
|
+
*/
|
|
54
|
+
export interface IdentifierValidateOptions {
|
|
55
|
+
genesisBytes?: Bytes;
|
|
56
|
+
genesisDocument?: object;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* The report that {@link Identifier.validate} returns.
|
|
60
|
+
* @interface IdentifierReport
|
|
61
|
+
* @property {string} did The identifier that was verified.
|
|
62
|
+
* @property {boolean} valid True if every check passed.
|
|
63
|
+
* @property {IdentifierTypes} [idType] The identifier type, known after the `bech32m` check.
|
|
64
|
+
* @property {string} [network] The network name, known after the `network` check.
|
|
65
|
+
* @property {Array<IdentifierCheck>} checks The checks that ran, in run order. The run stops at the first failed check.
|
|
66
|
+
*/
|
|
67
|
+
export interface IdentifierReport {
|
|
68
|
+
did: string;
|
|
69
|
+
valid: boolean;
|
|
70
|
+
idType?: IdentifierTypes;
|
|
71
|
+
network?: string;
|
|
72
|
+
checks: Array<IdentifierCheck>;
|
|
73
|
+
}
|
|
27
74
|
/**
|
|
28
75
|
* Implements {@link https://dcdpr.github.io/did-btcr2/#syntax | 3 Syntax}.
|
|
29
76
|
* A did:btcr2 DID consists of a did:btcr2 prefix, followed by an id-bech32 value, which is a Bech32m encoding of:
|
|
@@ -60,6 +107,26 @@ export declare class Identifier {
|
|
|
60
107
|
* @throws {DidErrorCode.MethodNotSupported} if the method is not supported
|
|
61
108
|
*/
|
|
62
109
|
static decode(identifier: string): DidComponents;
|
|
110
|
+
/**
|
|
111
|
+
* Validates that a did:btcr2 identifier conforms to
|
|
112
|
+
* {@link https://dcdpr.github.io/did-btcr2/#didbtcr2-identifier-decoding | 3.3 did:btcr2 Identifier Decoding}
|
|
113
|
+
* and returns a report of the checks. The method does not throw on an invalid identifier.
|
|
114
|
+
*
|
|
115
|
+
* The checks run in this order: `prefix`, `lowercase`, `bech32m`, `version`, `network`,
|
|
116
|
+
* `genesisBytes`, `roundTrip`, `genesisBytesMatch`, and `genesisDocument`. The run stops at the
|
|
117
|
+
* first failed check. The `network` check accepts a named network only: a reserved value (6 to
|
|
118
|
+
* 11) and a custom value (12 to 15) fail, because this implementation supports no custom network.
|
|
119
|
+
* The `genesisBytesMatch` check runs only if `options.genesisBytes` is present: the supplied bytes
|
|
120
|
+
* must equal the genesis bytes of the identifier, for a KEY or an EXTERNAL identifier. The
|
|
121
|
+
* `genesisDocument` check runs only if `options.genesisDocument` is present. For an EXTERNAL
|
|
122
|
+
* identifier it confirms that the document is a valid Genesis Document and that its canonical
|
|
123
|
+
* SHA-256 hash equals the genesis bytes. For a KEY identifier it fails.
|
|
124
|
+
*
|
|
125
|
+
* @param {string} identifier The did:btcr2 identifier to validate.
|
|
126
|
+
* @param {IdentifierValidateOptions} [options] The validation options.
|
|
127
|
+
* @returns {IdentifierReport} The report. See {@link IdentifierReport} for details.
|
|
128
|
+
*/
|
|
129
|
+
static validate(identifier: string, options?: IdentifierValidateOptions): IdentifierReport;
|
|
63
130
|
/**
|
|
64
131
|
* Generates a new did:btcr2 identifier based on a newly generated key pair.
|
|
65
132
|
* @returns {string} The new did:btcr2 identifier.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identifier.d.ts","sourceRoot":"","sources":["../../../src/core/identifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"identifier.d.ts","sourceRoot":"","sources":["../../../src/core/identifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EAIL,eAAe,EAGhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,4BAA4B,EAAkB,MAAM,oBAAoB,CAAC;AAGlF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKxD;;;;;GAKG;AACH,MAAM,WAAW,aAAc,SAAQ,oBAAoB;IACvD,GAAG,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,KAAK,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC3B,QAAQ,GACR,WAAW,GACX,SAAS,GACT,SAAS,GACT,SAAS,GACT,cAAc,GACd,WAAW,GACX,mBAAmB,GACnB,iBAAiB,CAAC;AAEtB;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,yBAAyB;IACtC,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;CAClC;AAKD;;;;;;;;;;GAUG;AACH,qBAAa,UAAU;IACrB;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,GAAG,aAAa,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAuDxF;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa;IAyFhD;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,yBAA8B,GAAG,gBAAgB;IAqJ9F;;;OAGG;IACH,MAAM,CAAC,QAAQ,IAAI;QAAE,OAAO,EAAE,oBAAoB,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAYjE;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,4BAA4B;IAW9D;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;CAQ5C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@did-btcr2/method",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.60.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Reference implementation for the did:btcr2 DID method written in TypeScript and JavaScript. did:btcr2 is a censorship resistant DID Method using the Bitcoin blockchain as a Verifiable Data Registry to announce changes to the DID document. This is the core method implementation for the did-btcr2-js monorepo.",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|
|
@@ -70,10 +70,10 @@
|
|
|
70
70
|
"@scure/btc-signer": "^1.8.1",
|
|
71
71
|
"@web5/dids": "^1.2.0",
|
|
72
72
|
"@did-btcr2/bitcoin": "^0.11.0",
|
|
73
|
+
"@did-btcr2/smt": "^0.3.0",
|
|
73
74
|
"@did-btcr2/cryptosuite": "^10.0.0",
|
|
74
|
-
"@did-btcr2/common": "^9.4.0",
|
|
75
75
|
"@did-btcr2/keypair": "^0.13.1",
|
|
76
|
-
"@did-btcr2/
|
|
76
|
+
"@did-btcr2/common": "^9.4.0"
|
|
77
77
|
},
|
|
78
78
|
"devDependencies": {
|
|
79
79
|
"@eslint/js": "^9.39.4",
|