@enbox/dids 0.0.2 → 0.0.3

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.
Files changed (68) hide show
  1. package/README.md +41 -1
  2. package/dist/browser.js +6 -10
  3. package/dist/browser.js.map +4 -4
  4. package/dist/browser.mjs +6 -10
  5. package/dist/browser.mjs.map +4 -4
  6. package/dist/esm/bearer-did.js +5 -5
  7. package/dist/esm/bearer-did.js.map +1 -1
  8. package/dist/esm/did.js +13 -6
  9. package/dist/esm/did.js.map +1 -1
  10. package/dist/esm/methods/did-dht.js +34 -25
  11. package/dist/esm/methods/did-dht.js.map +1 -1
  12. package/dist/esm/methods/did-ion.js +9 -7
  13. package/dist/esm/methods/did-ion.js.map +1 -1
  14. package/dist/esm/methods/did-jwk.js +3 -3
  15. package/dist/esm/methods/did-jwk.js.map +1 -1
  16. package/dist/esm/methods/did-key.js +12 -240
  17. package/dist/esm/methods/did-key.js.map +1 -1
  18. package/dist/esm/methods/did-web.js +3 -2
  19. package/dist/esm/methods/did-web.js.map +1 -1
  20. package/dist/esm/resolver/resolver-cache-level.js +1 -1
  21. package/dist/esm/resolver/resolver-cache-level.js.map +1 -1
  22. package/dist/esm/resolver/resolver-cache-noop.js +10 -10
  23. package/dist/esm/resolver/resolver-cache-noop.js.map +1 -1
  24. package/dist/esm/resolver/universal-resolver.js +3 -3
  25. package/dist/esm/resolver/universal-resolver.js.map +1 -1
  26. package/dist/esm/utils.js +37 -21
  27. package/dist/esm/utils.js.map +1 -1
  28. package/dist/types/bearer-did.d.ts +3 -2
  29. package/dist/types/bearer-did.d.ts.map +1 -1
  30. package/dist/types/did.d.ts.map +1 -1
  31. package/dist/types/methods/did-dht.d.ts +4 -4
  32. package/dist/types/methods/did-dht.d.ts.map +1 -1
  33. package/dist/types/methods/did-ion.d.ts +3 -2
  34. package/dist/types/methods/did-ion.d.ts.map +1 -1
  35. package/dist/types/methods/did-jwk.d.ts +2 -2
  36. package/dist/types/methods/did-jwk.d.ts.map +1 -1
  37. package/dist/types/methods/did-key.d.ts +3 -52
  38. package/dist/types/methods/did-key.d.ts.map +1 -1
  39. package/dist/types/methods/did-method.d.ts +3 -3
  40. package/dist/types/methods/did-method.d.ts.map +1 -1
  41. package/dist/types/resolver/resolver-cache-level.d.ts.map +1 -1
  42. package/dist/types/resolver/universal-resolver.d.ts +2 -2
  43. package/dist/types/resolver/universal-resolver.d.ts.map +1 -1
  44. package/dist/types/types/did-core.d.ts +1 -1
  45. package/dist/types/types/did-core.d.ts.map +1 -1
  46. package/dist/types/utils.d.ts +8 -5
  47. package/dist/types/utils.d.ts.map +1 -1
  48. package/dist/utils.js +1 -5
  49. package/dist/utils.js.map +4 -4
  50. package/package.json +30 -40
  51. package/src/bearer-did.ts +12 -11
  52. package/src/did.ts +8 -6
  53. package/src/methods/did-dht.ts +35 -35
  54. package/src/methods/did-ion.ts +12 -11
  55. package/src/methods/did-jwk.ts +6 -6
  56. package/src/methods/did-key.ts +24 -305
  57. package/src/methods/did-method.ts +3 -3
  58. package/src/methods/did-web.ts +2 -2
  59. package/src/resolver/resolver-cache-level.ts +4 -4
  60. package/src/resolver/resolver-cache-noop.ts +10 -10
  61. package/src/resolver/universal-resolver.ts +5 -5
  62. package/src/types/did-core.ts +3 -3
  63. package/src/utils.ts +28 -26
  64. package/dist/cjs/index.js +0 -6303
  65. package/dist/cjs/index.js.map +0 -7
  66. package/dist/cjs/package.json +0 -1
  67. package/dist/cjs/utils.js +0 -245
  68. package/dist/cjs/utils.js.map +0 -7
@@ -1,24 +1,23 @@
1
- import type { MulticodecCode, MulticodecDefinition, RequireOnly } from '@enbox/common';
2
1
  import type {
3
- Jwk,
2
+ AsymmetricKeyConverter,
4
3
  CryptoApi,
4
+ InferKeyGeneratorAlgorithm,
5
+ Jwk,
5
6
  KeyCompressor,
6
7
  KeyIdentifier,
8
+ KeyImporterExporter,
7
9
  KmsExportKeyParams,
8
10
  KmsImportKeyParams,
9
- KeyImporterExporter,
10
- AsymmetricKeyConverter,
11
- InferKeyGeneratorAlgorithm,
12
11
  } from '@enbox/crypto';
12
+ import type { MulticodecCode, MulticodecDefinition } from '@enbox/common';
13
13
 
14
- import { Multicodec, universalTypeOf } from '@enbox/common';
15
14
  import {
16
- X25519,
17
15
  Ed25519,
16
+ LocalKeyManager,
18
17
  Secp256k1,
19
18
  Secp256r1,
20
- LocalKeyManager,
21
19
  } from '@enbox/crypto';
20
+ import { Multicodec, universalTypeOf } from '@enbox/common';
22
21
 
23
22
  import type { PortableDid } from '../types/portable-did.js';
24
23
  import type { DidCreateOptions, DidCreateVerificationMethod } from './did-method.js';
@@ -29,12 +28,11 @@ import type {
29
28
  DidVerificationMethod,
30
29
  } from '../types/did-core.js';
31
30
 
31
+ import { BearerDid } from '../bearer-did.js';
32
32
  import { Did } from '../did.js';
33
33
  import { DidMethod } from './did-method.js';
34
- import { BearerDid } from '../bearer-did.js';
35
- import { DidError, DidErrorCode } from '../did-error.js';
36
- import { KeyWithMulticodec } from '../types/multibase.js';
37
34
  import { EMPTY_DID_RESOLUTION_RESULT } from '../types/did-resolution.js';
35
+ import { DidError, DidErrorCode } from '../did-error.js';
38
36
  import { getVerificationMethodTypes, keyBytesToMultibaseId, multibaseIdToKeyBytes } from '../utils.js';
39
37
 
40
38
  /**
@@ -103,23 +101,6 @@ export interface DidKeyCreateOptions<TKms> extends DidCreateOptions<TKms> {
103
101
  */
104
102
  defaultContext?: string;
105
103
 
106
- /**
107
- * Optionally enable encryption key derivation during DID creation.
108
- *
109
- * By default, this option is set to `false`, which means encryption key derivation is not
110
- * performed unless explicitly enabled.
111
- *
112
- * When set to `true`, an `X25519` key will be derived from the `Ed25519` public key used to
113
- * create the DID. This feature enables the same DID to be used for encrypted communication, in
114
- * addition to signature verification.
115
- *
116
- * Notes:
117
- * - This option is ONLY applicable when the `algorithm` of the DID's public key is `Ed25519`.
118
- * - Enabling this introduces specific cryptographic considerations that should be understood
119
- * before using the same key pair for digital signatures and encrypted communication. See the following for more information:
120
- */
121
- enableEncryptionKeyDerivation?: boolean;
122
-
123
104
  /**
124
105
  * Optionally enable experimental public key types during DID creation.
125
106
  * By default, this option is set to `false`, which means experimental public key types are not
@@ -167,11 +148,6 @@ export enum DidKeyRegisteredKeyType {
167
148
  * and is widely supported in various cryptographic libraries and standards.
168
149
  */
169
150
  secp256r1 = 'secp256r1',
170
-
171
- /**
172
- * X25519: A Diffie-Hellman key exchange algorithm using Curve25519.
173
- */
174
- X25519 = 'X25519'
175
151
  }
176
152
 
177
153
  /**
@@ -187,9 +163,6 @@ export const DidKeyVerificationMethodType = {
187
163
 
188
164
  /** Represents a JSON Web Key (JWK) used for digital signatures and key agreement protocols. */
189
165
  JsonWebKey2020: 'https://w3id.org/security/suites/jws-2020/v1',
190
-
191
- /** Represents an X25519 public key used for key agreement protocols. */
192
- X25519KeyAgreementKey2020: 'https://w3id.org/security/suites/x25519-2020/v1',
193
166
  } as const;
194
167
 
195
168
  /**
@@ -203,7 +176,6 @@ const AlgorithmToKeyTypeMap = {
203
176
  'P-256' : DidKeyRegisteredKeyType.secp256r1,
204
177
  secp256k1 : DidKeyRegisteredKeyType.secp256k1,
205
178
  secp256r1 : DidKeyRegisteredKeyType.secp256r1,
206
- X25519 : DidKeyRegisteredKeyType.X25519
207
179
  } as const;
208
180
 
209
181
  /**
@@ -230,13 +202,6 @@ const AlgorithmToKeyTypeMap = {
230
202
  * for the public key type and the raw public key bytes. To form the DID URI, the method-specific
231
203
  * identifier is prefixed with the string 'did:key:'.
232
204
  *
233
- * This method can optionally derive an encryption key from the public key used to create the DID
234
- * if and only if the public key algorithm is `Ed25519`. This feature enables the same DID to be
235
- * used for encrypted communication, in addition to signature verification. To enable this
236
- * feature when calling {@link DidKey.create | `DidKey.create()`}, first specify an `algorithm` of
237
- * `Ed25519` or provide a `keySet` referencing an `Ed25519` key and then set the
238
- * `enableEncryptionKeyDerivation` option to `true`.
239
- *
240
205
  * Note:
241
206
  * - The authors of the DID Key specification have indicated that use of this method for long-lived
242
207
  * use cases is only recommended when accompanied with high confidence that private keys are
@@ -310,12 +275,6 @@ export class DidKey extends DidMethod {
310
275
  * {@link https://github.com/multiformats/multicodec/blob/master/README.md | Multicodec}-encoded
311
276
  * public key and prefixing with `did:key:`.
312
277
  *
313
- * This method can optionally derive an encryption key from the public key used to create the DID
314
- * if and only if the public key algorithm is `Ed25519`. This feature enables the same DID to be
315
- * used for encrypted communication, in addition to signature verification. To enable this
316
- * feature, specify an `algorithm` of `Ed25519` as either a top-level option or in a
317
- * `verificationMethod` and set the `enableEncryptionKeyDerivation` option to `true`.
318
- *
319
278
  * Notes:
320
279
  * - If no `options` are given, by default a new Ed25519 key will be generated.
321
280
  * - The `algorithm` and `verificationMethods` options are mutually exclusive. If both are given,
@@ -491,7 +450,7 @@ export class DidKey extends DidMethod {
491
450
 
492
451
  } catch (error: any) {
493
452
  // Rethrow any unexpected errors that are not a `DidError`.
494
- if (!(error instanceof DidError)) throw new Error(error);
453
+ if (!(error instanceof DidError)) {throw new Error(error);}
495
454
 
496
455
  // Return a DID Resolution Result with the appropriate error code.
497
456
  return {
@@ -512,13 +471,12 @@ export class DidKey extends DidMethod {
512
471
  * @param options
513
472
  * @returns - A DID dodcument.
514
473
  */
515
- private static async createDocument({ didUri, options = {}}: {
474
+ private static async createDocument({ didUri, options = {} }: {
516
475
  didUri: string;
517
476
  options?: Exclude<DidKeyCreateOptions<CryptoApi>, 'algorithm' | 'verificationMethods'> | DidResolutionOptions;
518
477
  }): Promise<DidDocument> {
519
478
  const {
520
479
  defaultContext = 'https://www.w3.org/ns/did/v1',
521
- enableEncryptionKeyDerivation = false,
522
480
  enableExperimentalPublicKeyTypes = false,
523
481
  publicKeyFormat = 'JsonWebKey2020'
524
482
  } = options;
@@ -592,51 +550,7 @@ export class DidKey extends DidMethod {
592
550
  didDocument.capabilityDelegation = [signatureVerificationMethod.id];
593
551
 
594
552
  /**
595
- * 8. If options.enableEncryptionKeyDerivation is set to true:
596
- * Add the encryptionVerificationMethod value to the verificationMethod
597
- * array. Initialize the keyAgreement property in document to an array
598
- * where the first item is the value of the id property in
599
- * encryptionVerificationMethod.
600
- */
601
- if (enableEncryptionKeyDerivation === true) {
602
- /**
603
- * Although not covered by the did:key method specification, a sensible
604
- * default will be taken to use the 'X25519KeyAgreementKey2020'
605
- * verification method type if the given publicKeyFormat is
606
- * 'Ed25519VerificationKey2020' and 'JsonWebKey2020' otherwise.
607
- */
608
- const encryptionPublicKeyFormat =
609
- (publicKeyFormat === 'Ed25519VerificationKey2020')
610
- ? 'X25519KeyAgreementKey2020'
611
- : 'JsonWebKey2020';
612
-
613
- /**
614
- * 8.1 Initialize the encryptionVerificationMethod to the result of
615
- * passing identifier, multibaseValue, and options to an
616
- * {@link https://w3c-ccg.github.io/did-method-key/#encryption-method-creation-algorithm | Encryption Method Creation Algorithm}.
617
- */
618
- const encryptionVerificationMethod = await this.createEncryptionMethod({
619
- didUri,
620
- multibaseValue,
621
- options: { enableExperimentalPublicKeyTypes, publicKeyFormat: encryptionPublicKeyFormat }
622
- });
623
-
624
- /**
625
- * 8.2 Add the encryptionVerificationMethod value to the
626
- * verificationMethod array.
627
- */
628
- didDocument.verificationMethod.push(encryptionVerificationMethod);
629
-
630
- /**
631
- * 8.3. Initialize the keyAgreement property in document to an array
632
- * where the first item is the value of the id property in
633
- * encryptionVerificationMethod.
634
- */
635
- didDocument.keyAgreement = [encryptionVerificationMethod.id];
636
- }
637
-
638
- /**
639
- * 9. Initialize the @context property in document to the result of passing document and options to the Context
553
+ * 8. Initialize the @context property in document to the result of passing document and options to the Context
640
554
  * Creation algorithm.
641
555
  */
642
556
  // Set contextArray to an array that is initialized to options.defaultContext.
@@ -659,125 +573,6 @@ export class DidKey extends DidMethod {
659
573
  return didDocument;
660
574
  }
661
575
 
662
- /**
663
- * Decoding a multibase-encoded multicodec value into a verification method
664
- * that is suitable for verifying that encrypted information will be
665
- * received by the intended recipient.
666
- */
667
- private static async createEncryptionMethod({ didUri, multibaseValue, options }: {
668
- didUri: string;
669
- multibaseValue: string;
670
- options: Required<Pick<DidKeyCreateOptions<CryptoApi>, 'enableExperimentalPublicKeyTypes' | 'publicKeyFormat'>>;
671
- }): Promise<DidVerificationMethod> {
672
- const { enableExperimentalPublicKeyTypes, publicKeyFormat } = options;
673
-
674
- /**
675
- * 1. Initialize verificationMethod to an empty object.
676
- */
677
- const verificationMethod: DidVerificationMethod = { id: '', type: '', controller: '' };
678
-
679
- /**
680
- * 2. Set multicodecValue and raw publicKeyBytes to the result of passing multibaseValue and
681
- * options to a Derive Encryption Key algorithm.
682
- */
683
- const {
684
- keyBytes: publicKeyBytes,
685
- multicodecCode: multicodecValue,
686
- } = await DidKey.deriveEncryptionKey({ multibaseValue });
687
-
688
- /**
689
- * 3. Ensure the proper key length of raw publicKeyBytes based on the multicodecValue table
690
- * provided below:
691
- *
692
- * Multicodec hexadecimal value: 0xec
693
- *
694
- * If the byte length of raw publicKeyBytes does not match the expected public key length for
695
- * the associated multicodecValue, an invalidPublicKeyLength error MUST be raised.
696
- */
697
- const actualLength = publicKeyBytes.byteLength;
698
- const expectedLength = DidKeyUtils.MULTICODEC_PUBLIC_KEY_LENGTH[multicodecValue];
699
- if (actualLength !== expectedLength) {
700
- throw new DidError(DidErrorCode.InvalidPublicKeyLength, `Expected ${actualLength} bytes. Actual: ${expectedLength}`);
701
- }
702
-
703
- /**
704
- * 4. Create the multibaseValue by concatenating the letter 'z' and the
705
- * base58-btc encoding of the concatenation of the multicodecValue and
706
- * the raw publicKeyBytes.
707
- */
708
- const kemMultibaseValue = keyBytesToMultibaseId({
709
- keyBytes : publicKeyBytes,
710
- multicodecCode : multicodecValue
711
- });
712
-
713
- /**
714
- * 5. Set the verificationMethod.id value by concatenating identifier,
715
- * a hash character (#), and the multibaseValue. If verificationMethod.id
716
- * is not a valid DID URL, an invalidDidUrl error MUST be raised.
717
- */
718
- verificationMethod.id = `${didUri}#${kemMultibaseValue}`;
719
- try {
720
- new URL(verificationMethod.id);
721
- } catch (error: any) {
722
- throw new DidError(DidErrorCode.InvalidDidUrl, 'Verification Method ID is not a valid DID URL.');
723
- }
724
-
725
- /**
726
- * 6. Set the publicKeyFormat value to the options.publicKeyFormat value.
727
- * 7. If publicKeyFormat is not known to the implementation, an
728
- * unsupportedPublicKeyType error MUST be raised.
729
- */
730
- if (!(publicKeyFormat in DidKeyVerificationMethodType)) {
731
- throw new DidError(DidErrorCode.UnsupportedPublicKeyType, `Unsupported format: ${publicKeyFormat}`);
732
- }
733
-
734
- /**
735
- * 8. If options.enableExperimentalPublicKeyTypes is set to false and publicKeyFormat is not
736
- * Multikey, JsonWebKey2020, or X25519KeyAgreementKey2020, an invalidPublicKeyType error MUST be
737
- * raised.
738
- */
739
- const StandardPublicKeyTypes = ['Multikey', 'JsonWebKey2020', 'X25519KeyAgreementKey2020'];
740
- if (enableExperimentalPublicKeyTypes === false
741
- && !(StandardPublicKeyTypes.includes(publicKeyFormat))) {
742
- throw new DidError(DidErrorCode.InvalidPublicKeyType, `Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`);
743
- }
744
-
745
- /**
746
- * 9. Set verificationMethod.type to the publicKeyFormat value.
747
- */
748
- verificationMethod.type = publicKeyFormat;
749
-
750
- /**
751
- * 10. Set verificationMethod.controller to the identifier value.
752
- */
753
- verificationMethod.controller = didUri;
754
-
755
- /**
756
- * 11. If publicKeyFormat is Multikey or X25519KeyAgreementKey2020, set the verificationMethod.publicKeyMultibase
757
- * value to multibaseValue.
758
- *
759
- * Note: This implementation does not currently support the Multikey
760
- * format.
761
- */
762
- if (publicKeyFormat === 'X25519KeyAgreementKey2020') {
763
- verificationMethod.publicKeyMultibase = kemMultibaseValue;
764
- }
765
-
766
- /**
767
- * 12. If publicKeyFormat is JsonWebKey2020, set the verificationMethod.publicKeyJwk value to
768
- * the result of passing multicodecValue and rawPublicKeyBytes to a JWK encoding algorithm.
769
- */
770
- if (publicKeyFormat === 'JsonWebKey2020') {
771
- const { crv } = await DidKeyUtils.multicodecToJwk({ code: multicodecValue });
772
- verificationMethod.publicKeyJwk = await DidKeyUtils.keyConverter(crv!).bytesToPublicKey({ publicKeyBytes });
773
- }
774
-
775
- /**
776
- * 13. Return verificationMethod.
777
- */
778
- return verificationMethod;
779
- }
780
-
781
576
  /**
782
577
  * Decodes a multibase-encoded multicodec value into a verification method
783
578
  * that is suitable for verifying digital signatures.
@@ -831,11 +626,6 @@ export class DidKey extends DidMethod {
831
626
  case 'ed25519-pub':
832
627
  isValid = await Ed25519.validatePublicKey({ publicKeyBytes });
833
628
  break;
834
- case 'x25519-pub':
835
- // TODO: Validate key once/if X25519.validatePublicKey() is implemented.
836
- // isValid = X25519.validatePublicKey({ key: rawPublicKeyBytes})
837
- isValid = true;
838
- break;
839
629
  }
840
630
  if (!isValid) {
841
631
  throw new DidError(DidErrorCode.InvalidPublicKey, 'Invalid public key detected.');
@@ -849,7 +639,7 @@ export class DidKey extends DidMethod {
849
639
  verificationMethod.id = `${didUri}#${multibaseValue}`;
850
640
  try {
851
641
  new URL(verificationMethod.id);
852
- } catch (error: any) {
642
+ } catch {
853
643
  throw new DidError(DidErrorCode.InvalidDidUrl, 'Verification Method ID is not a valid DID URL.');
854
644
  }
855
645
 
@@ -870,7 +660,10 @@ export class DidKey extends DidMethod {
870
660
  const StandardPublicKeyTypes = ['Multikey', 'JsonWebKey2020', 'Ed25519VerificationKey2020'];
871
661
  if (enableExperimentalPublicKeyTypes === false
872
662
  && !(StandardPublicKeyTypes.includes(publicKeyFormat))) {
873
- throw new DidError(DidErrorCode.InvalidPublicKeyType, `Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`);
663
+ throw new DidError(
664
+ DidErrorCode.InvalidPublicKeyType,
665
+ `Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`
666
+ );
874
667
  }
875
668
 
876
669
  /**
@@ -900,7 +693,7 @@ export class DidKey extends DidMethod {
900
693
  */
901
694
  if (publicKeyFormat === 'JsonWebKey2020') {
902
695
  const { crv } = await DidKeyUtils.multicodecToJwk({ code: multicodecValue });
903
- verificationMethod.publicKeyJwk = await DidKeyUtils.keyConverter(crv!).bytesToPublicKey({ publicKeyBytes});
696
+ verificationMethod.publicKeyJwk = await DidKeyUtils.keyConverter(crv!).bytesToPublicKey({ publicKeyBytes });
904
697
  }
905
698
 
906
699
  /**
@@ -910,72 +703,6 @@ export class DidKey extends DidMethod {
910
703
  }
911
704
 
912
705
 
913
- /**
914
- * Transform a multibase-encoded multicodec value to public encryption key
915
- * components that are suitable for encrypting messages to a receiver. A
916
- * mathematical proof elaborating on the safety of performing this operation
917
- * is available in:
918
- * {@link https://eprint.iacr.org/2021/509.pdf | On using the same key pair for Ed25519 and an X25519 based KEM}
919
- */
920
- private static async deriveEncryptionKey({ multibaseValue }: {
921
- multibaseValue: string
922
- }): Promise<RequireOnly<KeyWithMulticodec, 'keyBytes' | 'multicodecCode'>> {
923
- /**
924
- * 1. Set publicEncryptionKey to an empty object.
925
- */
926
- let publicEncryptionKey: RequireOnly<KeyWithMulticodec, 'keyBytes' | 'multicodecCode'> = {
927
- keyBytes : new Uint8Array(),
928
- multicodecCode : 0
929
- };
930
-
931
- /**
932
- * 2. Decode multibaseValue using the base58-btc multibase alphabet and
933
- * set multicodecValue to the multicodec header for the decoded value.
934
- * Implementers are cautioned to ensure that the multicodecValue is set
935
- * to the result after performing varint decoding.
936
- *
937
- * 3. Set the rawPublicKeyBytes to the bytes remaining after the multicodec
938
- * header.
939
- */
940
- const {
941
- keyBytes: publicKeyBytes,
942
- multicodecCode: multicodecValue
943
- } = multibaseIdToKeyBytes({ multibaseKeyId: multibaseValue });
944
-
945
- /**
946
- * 4. If the multicodecValue is 0xed (Ed25519 public key), derive a public X25519 encryption key
947
- * by using the raw publicKeyBytes and the algorithm defined in
948
- * {@link https://datatracker.ietf.org/doc/html/draft-ietf-core-oscore-groupcomm | Group OSCORE - Secure Group Communication for CoAP}
949
- * for Curve25519 in Section 2.4.2: ECDH with Montgomery Coordinates and set
950
- * generatedPublicEncryptionKeyBytes to the result.
951
- */
952
- if (multicodecValue === 0xed) {
953
- const ed25519PublicKey = await DidKeyUtils.keyConverter('Ed25519').bytesToPublicKey({
954
- publicKeyBytes
955
- });
956
- const generatedPublicEncryptionKey = await Ed25519.convertPublicKeyToX25519({
957
- publicKey: ed25519PublicKey
958
- });
959
- const generatedPublicEncryptionKeyBytes = await DidKeyUtils.keyConverter('Ed25519').publicKeyToBytes({
960
- publicKey: generatedPublicEncryptionKey
961
- });
962
-
963
- /**
964
- * 5. Set multicodecValue to 0xec.
965
- * 6. Set raw public keyBytes to generatedPublicEncryptionKeyBytes.
966
- */
967
- publicEncryptionKey = {
968
- keyBytes : generatedPublicEncryptionKeyBytes,
969
- multicodecCode : 0xec
970
- };
971
- }
972
-
973
- /**
974
- * 7. Return publicEncryptionKey.
975
- */
976
- return publicEncryptionKey;
977
- }
978
-
979
706
  /**
980
707
  * Validates the structure and components of a DID URI against the `did:key` method specification.
981
708
  *
@@ -1031,8 +758,6 @@ export class DidKeyUtils {
1031
758
  'Ed25519:private' : 'ed25519-priv',
1032
759
  'secp256k1:public' : 'secp256k1-pub',
1033
760
  'secp256k1:private' : 'secp256k1-priv',
1034
- 'X25519:public' : 'x25519-pub',
1035
- 'X25519:private' : 'x25519-priv',
1036
761
  };
1037
762
 
1038
763
  /**
@@ -1043,9 +768,6 @@ export class DidKeyUtils {
1043
768
  // secp256k1-pub - Secp256k1 public key (compressed) - 33 bytes
1044
769
  0xe7: 33,
1045
770
 
1046
- // x25519-pub - Curve25519 public key - 32 bytes
1047
- 0xec: 32,
1048
-
1049
771
  // ed25519-pub - Ed25519 public key - 32 bytes
1050
772
  0xed: 32
1051
773
  };
@@ -1066,12 +788,10 @@ export class DidKeyUtils {
1066
788
  * ```
1067
789
  */
1068
790
  private static MULTICODEC_TO_JWK: { [key: string]: Jwk } = {
1069
- 'ed25519-pub' : { crv: 'Ed25519', kty: 'OKP', x: '' },
1070
- 'ed25519-priv' : { crv: 'Ed25519', kty: 'OKP', x: '', d: '' },
1071
- 'secp256k1-pub' : { crv: 'secp256k1', kty: 'EC', x: '', y: ''},
1072
- 'secp256k1-priv' : { crv: 'secp256k1', kty: 'EC', x: '', y: '', d: '' },
1073
- 'x25519-pub' : { crv: 'X25519', kty: 'OKP', x: '' },
1074
- 'x25519-priv' : { crv: 'X25519', kty: 'OKP', x: '', d: '' },
791
+ 'ed25519-pub' : { crv: 'Ed25519', kty: 'OKP', x: '' },
792
+ 'ed25519-priv' : { crv: 'Ed25519', kty: 'OKP', x: '', d: '' },
793
+ 'secp256k1-pub' : { crv: 'secp256k1', kty: 'EC', x: '', y: '' },
794
+ 'secp256k1-priv' : { crv: 'secp256k1', kty: 'EC', x: '', y: '', d: '' },
1075
795
  };
1076
796
 
1077
797
  /**
@@ -1130,7 +850,7 @@ export class DidKeyUtils {
1130
850
 
1131
851
  const compressor = compressors[curve];
1132
852
 
1133
- if (!compressor) throw new DidError(DidErrorCode.InvalidPublicKeyType, `Unsupported curve: ${curve}`);
853
+ if (!compressor) {throw new DidError(DidErrorCode.InvalidPublicKeyType, `Unsupported curve: ${curve}`);}
1134
854
 
1135
855
  return compressor;
1136
856
  }
@@ -1146,12 +866,11 @@ export class DidKeyUtils {
1146
866
  'Ed25519' : Ed25519,
1147
867
  'P-256' : Secp256r1,
1148
868
  'secp256k1' : Secp256k1,
1149
- 'X25519' : X25519
1150
869
  };
1151
870
 
1152
871
  const converter = converters[curve];
1153
872
 
1154
- if (!converter) throw new DidError(DidErrorCode.InvalidPublicKeyType, `Unsupported curve: ${curve}`);
873
+ if (!converter) {throw new DidError(DidErrorCode.InvalidPublicKeyType, `Unsupported curve: ${curve}`);}
1155
874
 
1156
875
  return converter;
1157
876
  }
@@ -1,19 +1,19 @@
1
1
  import type {
2
2
  CryptoApi,
3
- LocalKeyManager,
4
3
  InferKeyGeneratorAlgorithm,
4
+ LocalKeyManager,
5
5
  } from '@enbox/crypto';
6
6
 
7
7
  import type { BearerDid } from '../bearer-did.js';
8
8
  import type { DidMetadata } from '../types/portable-did.js';
9
9
  import type {
10
10
  DidDocument,
11
- DidResolutionResult,
12
11
  DidResolutionOptions,
12
+ DidResolutionResult,
13
13
  DidVerificationMethod,
14
14
  } from '../types/did-core.js';
15
15
 
16
- import { DidVerificationRelationship } from '../types/did-core.js';
16
+ import type { DidVerificationRelationship } from '../types/did-core.js';
17
17
 
18
18
  /**
19
19
  * Represents options during the creation of a Decentralized Identifier (DID).
@@ -75,7 +75,7 @@ export class DidWeb extends DidMethod {
75
75
  const response = await fetch(didDocumentUrl);
76
76
 
77
77
  // If the response status code is not 200, return an error.
78
- if (!response.ok) throw new Error('HTTP error status code returned');
78
+ if (!response.ok) {throw new Error('HTTP error status code returned');}
79
79
 
80
80
  // Parse the DID document.
81
81
  const didDocument = await response.json() as DidDocument;
@@ -85,7 +85,7 @@ export class DidWeb extends DidMethod {
85
85
  didDocument,
86
86
  };
87
87
 
88
- } catch (error: any) {
88
+ } catch {
89
89
  // If the DID document could not be retrieved, return an error.
90
90
  return {
91
91
  ...EMPTY_DID_RESOLUTION_RESULT,
@@ -1,7 +1,7 @@
1
1
  import type { AbstractLevel } from 'abstract-level';
2
2
 
3
- import ms from 'ms';
4
3
  import { Level } from 'level';
4
+ import ms from 'ms';
5
5
 
6
6
  import type { DidResolutionResult } from '../types/did-core.js';
7
7
  import type { DidResolverCache } from '../types/did-resolution.js';
@@ -31,7 +31,7 @@ export type DidResolverCacheLevelParams = {
31
31
  * to '15m' if not specified.
32
32
  */
33
33
  ttl?: string;
34
- }
34
+ };
35
35
 
36
36
  /**
37
37
  * Encapsulates a DID resolution result along with its expiration information for caching purposes.
@@ -54,7 +54,7 @@ type CachedDidResolutionResult = {
54
54
  * This object contains the resolved DID document and associated metadata.
55
55
  */
56
56
  value: DidResolutionResult;
57
- }
57
+ };
58
58
 
59
59
  /**
60
60
  * A Level-based cache implementation for storing and retrieving DID resolution results.
@@ -109,7 +109,7 @@ export class DidResolverCacheLevel implements DidResolverCache {
109
109
  return cachedDidResolutionResult.value;
110
110
  }
111
111
 
112
- } catch(error: any) {
112
+ } catch (error: any) {
113
113
  // Don't throw when a key wasn't found.
114
114
  if (error.notFound) {
115
115
  return;
@@ -8,19 +8,19 @@ import type { DidResolverCache } from '../types/did-resolution.js';
8
8
  * potential for this library to be used in as many JS runtimes as possible.
9
9
  */
10
10
  export const DidResolverCacheNoop: DidResolverCache = {
11
- get: function (_key: string): Promise<DidResolutionResult> {
12
- return null as any;
11
+ get(_key: string): Promise<DidResolutionResult | void> {
12
+ return Promise.resolve(undefined);
13
13
  },
14
- set: function (_key: string, _value: DidResolutionResult): Promise<void> {
15
- return null as any;
14
+ set(_key: string, _value: DidResolutionResult): Promise<void> {
15
+ return Promise.resolve();
16
16
  },
17
- delete: function (_key: string): Promise<void> {
18
- return null as any;
17
+ delete(_key: string): Promise<boolean | void> {
18
+ return Promise.resolve();
19
19
  },
20
- clear: function (): Promise<void> {
21
- return null as any;
20
+ clear(): Promise<void> {
21
+ return Promise.resolve();
22
22
  },
23
- close: function (): Promise<void> {
24
- return null as any;
23
+ close(): Promise<void> {
24
+ return Promise.resolve();
25
25
  }
26
26
  };
@@ -1,6 +1,6 @@
1
1
  import type { DidMethodResolver } from '../methods/did-method.js';
2
- import type { DidResolver, DidResolverCache, DidUrlDereferencer } from '../types/did-resolution.js';
3
2
  import type { DidDereferencingOptions, DidDereferencingResult, DidResolutionOptions, DidResolutionResult, DidResource } from '../types/did-core.js';
3
+ import type { DidResolver, DidResolverCache, DidUrlDereferencer } from '../types/did-resolution.js';
4
4
 
5
5
  import { Did } from '../did.js';
6
6
  import { DidErrorCode } from '../did-error.js';
@@ -33,7 +33,7 @@ export type UniversalResolverParams = {
33
33
  * which effectively disables caching.
34
34
  */
35
35
  cache?: DidResolverCache;
36
- }
36
+ };
37
37
 
38
38
  /**
39
39
  * The `DidResolver` class provides mechanisms for resolving Decentralized Identifiers (DIDs) to
@@ -153,7 +153,7 @@ export class UniversalResolver implements DidResolver, DidUrlDereferencer {
153
153
  * More information on DID URL dereferencing can be found in the
154
154
  * {@link https://www.w3.org/TR/did-core/#did-url-dereferencing | DID Core specification}.
155
155
  *
156
- * TODO: This is a partial implementation and does not fully implement DID URL dereferencing. (https://github.com/TBD54566975/web5-js/issues/387)
156
+ * TODO: This is a partial implementation and does not fully implement DID URL dereferencing. (https://github.com/enboxorg/enbox/issues/387)
157
157
  *
158
158
  * @param didUrl - The DID URL string to dereference.
159
159
  * @param [_options] - Input options to the dereference function. Optional.
@@ -206,7 +206,7 @@ export class UniversalResolver implements DidResolver, DidUrlDereferencer {
206
206
  let didResource: DidResource | undefined;
207
207
 
208
208
  // Find the first matching verification method in the DID document.
209
- for (let vm of verificationMethod) {
209
+ for (const vm of verificationMethod) {
210
210
  if (idSet.has(vm.id)) {
211
211
  didResource = vm;
212
212
  break;
@@ -214,7 +214,7 @@ export class UniversalResolver implements DidResolver, DidUrlDereferencer {
214
214
  }
215
215
 
216
216
  // Find the first matching service in the DID document.
217
- for (let svc of service) {
217
+ for (const svc of service) {
218
218
  if (idSet.has(svc.id)) {
219
219
  didResource = svc;
220
220
  break;
@@ -1,4 +1,4 @@
1
- import { Jwk } from '@enbox/crypto';
1
+ import type { Jwk } from '@enbox/crypto';
2
2
 
3
3
  /**
4
4
  * Represents metadata related to the process of DID dereferencing.
@@ -33,7 +33,7 @@ export type DidDereferencingMetadata = {
33
33
 
34
34
  // Additional output metadata generated during DID Resolution.
35
35
  [key: string]: any;
36
- }
36
+ };
37
37
 
38
38
  /**
39
39
  * Represents the options that can be used during the process of DID dereferencing.
@@ -90,7 +90,7 @@ export type DidDereferencingResult = {
90
90
  * dereferencing is unsuccessful, this output MUST be an empty metadata structure.
91
91
  */
92
92
  contentMetadata: DidDocumentMetadata;
93
- }
93
+ };
94
94
 
95
95
  /**
96
96
  * A set of data describing the Decentralized Identifierr (DID) subject.