@enbox/dwn-sdk-js 0.4.4 → 0.4.6

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 (201) hide show
  1. package/dist/browser.mjs +15 -15
  2. package/dist/browser.mjs.map +4 -4
  3. package/dist/esm/generated/precompiled-validators.js +5406 -2391
  4. package/dist/esm/generated/precompiled-validators.js.map +1 -1
  5. package/dist/esm/json-schemas/definitions.json +18 -0
  6. package/dist/esm/src/core/constants.js +3 -3
  7. package/dist/esm/src/core/constants.js.map +1 -1
  8. package/dist/esm/src/core/dwn-error.js +29 -1
  9. package/dist/esm/src/core/dwn-error.js.map +1 -1
  10. package/dist/esm/src/core/messages-grant-authorization.js +20 -0
  11. package/dist/esm/src/core/messages-grant-authorization.js.map +1 -1
  12. package/dist/esm/src/core/protocol-authorization-validation.js +80 -3
  13. package/dist/esm/src/core/protocol-authorization-validation.js.map +1 -1
  14. package/dist/esm/src/core/recording-validation-state-reader.js +5 -0
  15. package/dist/esm/src/core/recording-validation-state-reader.js.map +1 -1
  16. package/dist/esm/src/core/replication-apply.js +163 -7
  17. package/dist/esm/src/core/replication-apply.js.map +1 -1
  18. package/dist/esm/src/core/validation-state-reader.js +20 -0
  19. package/dist/esm/src/core/validation-state-reader.js.map +1 -1
  20. package/dist/esm/src/dwn.js +19 -2
  21. package/dist/esm/src/dwn.js.map +1 -1
  22. package/dist/esm/src/handlers/messages-query.js +3 -5
  23. package/dist/esm/src/handlers/messages-query.js.map +1 -1
  24. package/dist/esm/src/handlers/protocols-configure.js +10 -4
  25. package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
  26. package/dist/esm/src/handlers/records-write.js +1 -1
  27. package/dist/esm/src/handlers/records-write.js.map +1 -1
  28. package/dist/esm/src/index.js +2 -1
  29. package/dist/esm/src/index.js.map +1 -1
  30. package/dist/esm/src/interfaces/protocols-configure.js +23 -10
  31. package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
  32. package/dist/esm/src/interfaces/records-write-signing.js +2 -8
  33. package/dist/esm/src/interfaces/records-write-signing.js.map +1 -1
  34. package/dist/esm/src/interfaces/records-write.js +43 -65
  35. package/dist/esm/src/interfaces/records-write.js.map +1 -1
  36. package/dist/esm/src/protocols/encryption.js +411 -0
  37. package/dist/esm/src/protocols/encryption.js.map +1 -0
  38. package/dist/esm/src/protocols/permission-grant.js +0 -5
  39. package/dist/esm/src/protocols/permission-grant.js.map +1 -1
  40. package/dist/esm/src/types/message-types.js.map +1 -1
  41. package/dist/esm/src/types/permission-types.js.map +1 -1
  42. package/dist/esm/src/types/protocols-types.js.map +1 -1
  43. package/dist/esm/src/utils/encryption.js +156 -188
  44. package/dist/esm/src/utils/encryption.js.map +1 -1
  45. package/dist/esm/src/utils/hd-key.js +0 -1
  46. package/dist/esm/src/utils/hd-key.js.map +1 -1
  47. package/dist/esm/src/utils/permission-scope.js +9 -6
  48. package/dist/esm/src/utils/permission-scope.js.map +1 -1
  49. package/dist/esm/src/utils/protocols.js +12 -9
  50. package/dist/esm/src/utils/protocols.js.map +1 -1
  51. package/dist/esm/src/utils/records.js +54 -56
  52. package/dist/esm/src/utils/records.js.map +1 -1
  53. package/dist/esm/src/utils/replication.js +27 -4
  54. package/dist/esm/src/utils/replication.js.map +1 -1
  55. package/dist/esm/tests/core/replication-apply.spec.js +141 -1
  56. package/dist/esm/tests/core/replication-apply.spec.js.map +1 -1
  57. package/dist/esm/tests/core/replication-replay-property.spec.js +1 -0
  58. package/dist/esm/tests/core/replication-replay-property.spec.js.map +1 -1
  59. package/dist/esm/tests/core/validation-read-closure.spec.js +111 -0
  60. package/dist/esm/tests/core/validation-read-closure.spec.js.map +1 -1
  61. package/dist/esm/tests/core/validation-state-reader.spec.js +89 -0
  62. package/dist/esm/tests/core/validation-state-reader.spec.js.map +1 -1
  63. package/dist/esm/tests/features/protocol-composition.spec.js +30 -31
  64. package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -1
  65. package/dist/esm/tests/fuzz/encryption.fuzz.spec.js +29 -121
  66. package/dist/esm/tests/fuzz/encryption.fuzz.spec.js.map +1 -1
  67. package/dist/esm/tests/handlers/messages-query.spec.js +71 -3
  68. package/dist/esm/tests/handlers/messages-query.spec.js.map +1 -1
  69. package/dist/esm/tests/handlers/messages-read.spec.js +2 -2
  70. package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -1
  71. package/dist/esm/tests/handlers/records-read.spec.js +9 -135
  72. package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
  73. package/dist/esm/tests/handlers/records-write.spec.js +279 -19
  74. package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
  75. package/dist/esm/tests/interfaces/protocols-configure.spec.js +17 -22
  76. package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -1
  77. package/dist/esm/tests/interfaces/records-write.spec.js +170 -150
  78. package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
  79. package/dist/esm/tests/protocols/encryption.spec.js +914 -0
  80. package/dist/esm/tests/protocols/encryption.spec.js.map +1 -0
  81. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +100 -100
  82. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
  83. package/dist/esm/tests/store/message-store-level.spec.js +20 -2
  84. package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
  85. package/dist/esm/tests/utils/encryption-callbacks.spec.js +88 -125
  86. package/dist/esm/tests/utils/encryption-callbacks.spec.js.map +1 -1
  87. package/dist/esm/tests/utils/encryption.spec.js +121 -271
  88. package/dist/esm/tests/utils/encryption.spec.js.map +1 -1
  89. package/dist/esm/tests/utils/permission-scope.spec.js +5 -1
  90. package/dist/esm/tests/utils/permission-scope.spec.js.map +1 -1
  91. package/dist/esm/tests/utils/records.spec.js +15 -5
  92. package/dist/esm/tests/utils/records.spec.js.map +1 -1
  93. package/dist/esm/tests/utils/test-data-generator.js +7 -44
  94. package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
  95. package/dist/esm/tests/validation/json-schemas/encryption/audience-key.spec.js +40 -0
  96. package/dist/esm/tests/validation/json-schemas/encryption/audience-key.spec.js.map +1 -0
  97. package/dist/esm/tests/validation/json-schemas/encryption/grant-key.spec.js +72 -0
  98. package/dist/esm/tests/validation/json-schemas/encryption/grant-key.spec.js.map +1 -0
  99. package/dist/types/generated/precompiled-validators.d.ts +140 -92
  100. package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
  101. package/dist/types/src/core/constants.d.ts +2 -2
  102. package/dist/types/src/core/constants.d.ts.map +1 -1
  103. package/dist/types/src/core/core-protocol.d.ts +1 -1
  104. package/dist/types/src/core/core-protocol.d.ts.map +1 -1
  105. package/dist/types/src/core/dwn-error.d.ts +29 -1
  106. package/dist/types/src/core/dwn-error.d.ts.map +1 -1
  107. package/dist/types/src/core/messages-grant-authorization.d.ts +2 -0
  108. package/dist/types/src/core/messages-grant-authorization.d.ts.map +1 -1
  109. package/dist/types/src/core/protocol-authorization-validation.d.ts +2 -2
  110. package/dist/types/src/core/protocol-authorization-validation.d.ts.map +1 -1
  111. package/dist/types/src/core/recording-validation-state-reader.d.ts +9 -0
  112. package/dist/types/src/core/recording-validation-state-reader.d.ts.map +1 -1
  113. package/dist/types/src/core/replication-apply.d.ts +4 -3
  114. package/dist/types/src/core/replication-apply.d.ts.map +1 -1
  115. package/dist/types/src/core/validation-state-reader.d.ts +9 -0
  116. package/dist/types/src/core/validation-state-reader.d.ts.map +1 -1
  117. package/dist/types/src/dwn.d.ts +1 -0
  118. package/dist/types/src/dwn.d.ts.map +1 -1
  119. package/dist/types/src/handlers/messages-query.d.ts.map +1 -1
  120. package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -1
  121. package/dist/types/src/index.d.ts +6 -5
  122. package/dist/types/src/index.d.ts.map +1 -1
  123. package/dist/types/src/interfaces/protocols-configure.d.ts +1 -1
  124. package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -1
  125. package/dist/types/src/interfaces/records-write-signing.d.ts +4 -8
  126. package/dist/types/src/interfaces/records-write-signing.d.ts.map +1 -1
  127. package/dist/types/src/interfaces/records-write.d.ts +10 -26
  128. package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
  129. package/dist/types/src/protocols/encryption.d.ts +43 -0
  130. package/dist/types/src/protocols/encryption.d.ts.map +1 -0
  131. package/dist/types/src/protocols/permission-grant.d.ts +0 -7
  132. package/dist/types/src/protocols/permission-grant.d.ts.map +1 -1
  133. package/dist/types/src/types/encryption-types.d.ts +5 -38
  134. package/dist/types/src/types/encryption-types.d.ts.map +1 -1
  135. package/dist/types/src/types/message-types.d.ts +0 -13
  136. package/dist/types/src/types/message-types.d.ts.map +1 -1
  137. package/dist/types/src/types/permission-types.d.ts +0 -9
  138. package/dist/types/src/types/permission-types.d.ts.map +1 -1
  139. package/dist/types/src/types/protocols-types.d.ts +9 -14
  140. package/dist/types/src/types/protocols-types.d.ts.map +1 -1
  141. package/dist/types/src/types/records-types.d.ts +3 -3
  142. package/dist/types/src/types/records-types.d.ts.map +1 -1
  143. package/dist/types/src/types/validation-state-reader.d.ts +12 -0
  144. package/dist/types/src/types/validation-state-reader.d.ts.map +1 -1
  145. package/dist/types/src/utils/encryption.d.ts +61 -145
  146. package/dist/types/src/utils/encryption.d.ts.map +1 -1
  147. package/dist/types/src/utils/hd-key.d.ts +1 -1
  148. package/dist/types/src/utils/hd-key.d.ts.map +1 -1
  149. package/dist/types/src/utils/permission-scope.d.ts +4 -3
  150. package/dist/types/src/utils/permission-scope.d.ts.map +1 -1
  151. package/dist/types/src/utils/protocols.d.ts +3 -5
  152. package/dist/types/src/utils/protocols.d.ts.map +1 -1
  153. package/dist/types/src/utils/records.d.ts +5 -13
  154. package/dist/types/src/utils/records.d.ts.map +1 -1
  155. package/dist/types/src/utils/replication.d.ts +3 -0
  156. package/dist/types/src/utils/replication.d.ts.map +1 -1
  157. package/dist/types/tests/features/protocol-composition.spec.d.ts.map +1 -1
  158. package/dist/types/tests/handlers/messages-query.spec.d.ts.map +1 -1
  159. package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -1
  160. package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -1
  161. package/dist/types/tests/protocols/encryption.spec.d.ts +2 -0
  162. package/dist/types/tests/protocols/encryption.spec.d.ts.map +1 -0
  163. package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts.map +1 -1
  164. package/dist/types/tests/utils/test-data-generator.d.ts +0 -5
  165. package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
  166. package/dist/types/tests/validation/json-schemas/encryption/audience-key.spec.d.ts +2 -0
  167. package/dist/types/tests/validation/json-schemas/encryption/audience-key.spec.d.ts.map +1 -0
  168. package/dist/types/tests/validation/json-schemas/encryption/grant-key.spec.d.ts +2 -0
  169. package/dist/types/tests/validation/json-schemas/encryption/grant-key.spec.d.ts.map +1 -0
  170. package/package.json +3 -3
  171. package/src/core/constants.ts +3 -3
  172. package/src/core/core-protocol.ts +1 -1
  173. package/src/core/dwn-error.ts +29 -1
  174. package/src/core/messages-grant-authorization.ts +27 -0
  175. package/src/core/protocol-authorization-validation.ts +145 -6
  176. package/src/core/recording-validation-state-reader.ts +13 -0
  177. package/src/core/replication-apply.ts +222 -8
  178. package/src/core/validation-state-reader.ts +30 -0
  179. package/src/dwn.ts +24 -2
  180. package/src/handlers/messages-query.ts +6 -5
  181. package/src/handlers/protocols-configure.ts +19 -3
  182. package/src/handlers/records-write.ts +1 -1
  183. package/src/index.ts +15 -5
  184. package/src/interfaces/protocols-configure.ts +39 -12
  185. package/src/interfaces/records-write-signing.ts +5 -12
  186. package/src/interfaces/records-write.ts +75 -92
  187. package/src/protocols/encryption.ts +649 -0
  188. package/src/protocols/permission-grant.ts +0 -6
  189. package/src/types/encryption-types.ts +9 -38
  190. package/src/types/message-types.ts +0 -13
  191. package/src/types/permission-types.ts +0 -10
  192. package/src/types/protocols-types.ts +9 -16
  193. package/src/types/records-types.ts +3 -3
  194. package/src/types/validation-state-reader.ts +13 -0
  195. package/src/utils/encryption.ts +258 -280
  196. package/src/utils/hd-key.ts +1 -1
  197. package/src/utils/permission-scope.ts +10 -6
  198. package/src/utils/protocols.ts +16 -15
  199. package/src/utils/records.ts +86 -71
  200. package/src/utils/replication.ts +30 -4
  201. package/dist/esm/tests/vectors/protocol-definitions/chat.json +0 -70
@@ -1,4 +1,5 @@
1
1
  import { ArrayUtility } from '../../src/utils/array.js';
2
+ import { Cid } from '../../src/utils/cid.js';
2
3
  import { DataStream } from '../../src/index.js';
3
4
  import { DwnErrorCode } from '../../src/core/dwn-error.js';
4
5
  import { Encoder } from '../../src/utils/encoder.js';
@@ -6,341 +7,190 @@ import { KeyDerivationScheme } from '../../src/utils/hd-key.js';
6
7
  import { Records } from '../../src/utils/records.js';
7
8
  import { TestDataGenerator } from './test-data-generator.js';
8
9
  import { X25519 } from '@enbox/crypto';
9
- import { ContentEncryptionAlgorithm, Encryption } from '../../src/utils/encryption.js';
10
+ import { ContentEncryptionAlgorithm, Encryption, KeyAgreementAlgorithm } from '../../src/utils/encryption.js';
10
11
  import { describe, expect, it } from 'bun:test';
11
- /** Boundary sizes that exercise edge cases in AEAD ciphers. */
12
12
  const boundarySizes = [0, 1, 15, 16, 17, 32, 256];
13
- describe('Encryption', () => {
14
- describe('AEAD A256GCM', () => {
15
- it('should be able to encrypt and decrypt data correctly', async () => {
16
- const key = TestDataGenerator.randomBytes(32);
17
- const iv = TestDataGenerator.randomBytes(12); // 96-bit nonce for AES-GCM
18
- const inputBytes = TestDataGenerator.randomBytes(1_000_000);
19
- const { ciphertext, tag } = await Encryption.aeadEncrypt(ContentEncryptionAlgorithm.A256GCM, key, iv, inputBytes);
20
- const plaintext = await Encryption.aeadDecrypt(ContentEncryptionAlgorithm.A256GCM, key, iv, ciphertext, tag);
21
- expect(ArrayUtility.byteArraysEqual(inputBytes, plaintext)).toBe(true);
22
- });
23
- it('should be able to encrypt and decrypt a data stream correctly', async () => {
24
- const key = TestDataGenerator.randomBytes(32);
25
- const iv = TestDataGenerator.randomBytes(12);
26
- const inputBytes = TestDataGenerator.randomBytes(1_000_000);
27
- const inputStream = DataStream.fromBytes(inputBytes);
28
- const { ciphertextStream, tag } = await Encryption.aeadEncryptStream(ContentEncryptionAlgorithm.A256GCM, key, iv, inputStream);
29
- const plaintextStream = await Encryption.aeadDecryptStream(ContentEncryptionAlgorithm.A256GCM, key, iv, ciphertextStream, tag);
30
- const plaintextBytes = await DataStream.toBytes(plaintextStream);
31
- expect(ArrayUtility.byteArraysEqual(inputBytes, plaintextBytes)).toBe(true);
32
- });
33
- it('should handle boundary plaintext sizes via byte API', async () => {
34
- const key = TestDataGenerator.randomBytes(32);
35
- const iv = TestDataGenerator.randomBytes(12);
36
- for (const size of boundarySizes) {
37
- const inputBytes = size === 0 ? new Uint8Array(0) : TestDataGenerator.randomBytes(size);
38
- const { ciphertext, tag } = await Encryption.aeadEncrypt(ContentEncryptionAlgorithm.A256GCM, key, iv, inputBytes);
39
- const plaintext = await Encryption.aeadDecrypt(ContentEncryptionAlgorithm.A256GCM, key, iv, ciphertext, tag);
40
- expect(plaintext.length).toBe(size);
41
- expect(ArrayUtility.byteArraysEqual(inputBytes, plaintext)).toBe(true);
42
- }
43
- });
44
- it('should handle boundary plaintext sizes via stream API', async () => {
45
- const key = TestDataGenerator.randomBytes(32);
46
- const iv = TestDataGenerator.randomBytes(12);
47
- for (const size of boundarySizes) {
48
- const inputBytes = size === 0 ? new Uint8Array(0) : TestDataGenerator.randomBytes(size);
49
- const inputStream = DataStream.fromBytes(inputBytes);
50
- const { ciphertextStream, tag } = await Encryption.aeadEncryptStream(ContentEncryptionAlgorithm.A256GCM, key, iv, inputStream);
51
- const plaintextStream = await Encryption.aeadDecryptStream(ContentEncryptionAlgorithm.A256GCM, key, iv, ciphertextStream, tag);
52
- const plaintextBytes = await DataStream.toBytes(plaintextStream);
53
- expect(plaintextBytes.length).toBe(size);
54
- expect(ArrayUtility.byteArraysEqual(inputBytes, plaintextBytes)).toBe(true);
55
- }
56
- });
13
+ async function createEncryptedRecordFixture(plaintext = TestDataGenerator.randomBytes(64)) {
14
+ const recipientPrivateKey = await X25519.generateKey();
15
+ const recipientPublicKey = await X25519.getPublicKey({ key: recipientPrivateKey });
16
+ const cek = TestDataGenerator.randomBytes(32);
17
+ const iv = TestDataGenerator.randomBytes(16);
18
+ const ciphertext = await Encryption.encrypt(ContentEncryptionAlgorithm.A256CTR, cek, iv, plaintext);
19
+ const keyId = await Encryption.getKeyId(recipientPublicKey);
20
+ const encryption = await Encryption.buildEncryptionProperty({
21
+ initializationVector: iv,
22
+ key: cek,
23
+ keyEncryptionInputs: [{
24
+ derivationScheme: KeyDerivationScheme.ProtocolPath,
25
+ keyId,
26
+ publicKey: recipientPublicKey,
27
+ }],
57
28
  });
58
- describe('AEAD XC20P', () => {
59
- it('should be able to encrypt and decrypt data correctly', async () => {
29
+ const message = {
30
+ descriptor: {
31
+ dataCid: await Cid.computeDagPbCidFromBytes(ciphertext),
32
+ dataFormat: 'application/octet-stream',
33
+ dataSize: ciphertext.byteLength,
34
+ dateCreated: '2024-01-01T00:00:00.000000Z',
35
+ interface: 'Records',
36
+ messageTimestamp: '2024-01-01T00:00:00.000000Z',
37
+ method: 'Write',
38
+ protocol: 'https://example.com/protocol',
39
+ protocolPath: 'note',
40
+ },
41
+ encryption,
42
+ recordId: 'test-record-id',
43
+ };
44
+ return {
45
+ cek,
46
+ ciphertext,
47
+ message,
48
+ plaintext,
49
+ recipientPrivateKey,
50
+ recipientPublicKey,
51
+ };
52
+ }
53
+ describe('Encryption', () => {
54
+ describe('A256CTR', () => {
55
+ it('should encrypt and decrypt bytes correctly', async () => {
60
56
  const key = TestDataGenerator.randomBytes(32);
61
- const nonce = TestDataGenerator.randomBytes(24); // 192-bit nonce for XChaCha20-Poly1305
57
+ const iv = TestDataGenerator.randomBytes(16);
62
58
  const inputBytes = TestDataGenerator.randomBytes(1_000_000);
63
- const { ciphertext, tag } = await Encryption.aeadEncrypt(ContentEncryptionAlgorithm.XC20P, key, nonce, inputBytes);
64
- const plaintext = await Encryption.aeadDecrypt(ContentEncryptionAlgorithm.XC20P, key, nonce, ciphertext, tag);
59
+ const ciphertext = await Encryption.encrypt(ContentEncryptionAlgorithm.A256CTR, key, iv, inputBytes);
60
+ const plaintext = await Encryption.decrypt(ContentEncryptionAlgorithm.A256CTR, key, iv, ciphertext);
65
61
  expect(ArrayUtility.byteArraysEqual(inputBytes, plaintext)).toBe(true);
66
62
  });
67
- it('should be able to encrypt and decrypt a data stream correctly', async () => {
63
+ it('should encrypt and decrypt streams correctly', async () => {
68
64
  const key = TestDataGenerator.randomBytes(32);
69
- const nonce = TestDataGenerator.randomBytes(24);
65
+ const iv = TestDataGenerator.randomBytes(16);
70
66
  const inputBytes = TestDataGenerator.randomBytes(1_000_000);
71
- const inputStream = DataStream.fromBytes(inputBytes);
72
- const { ciphertextStream, tag } = await Encryption.aeadEncryptStream(ContentEncryptionAlgorithm.XC20P, key, nonce, inputStream);
73
- const plaintextStream = await Encryption.aeadDecryptStream(ContentEncryptionAlgorithm.XC20P, key, nonce, ciphertextStream, tag);
67
+ const ciphertextStream = await Encryption.encryptStream(ContentEncryptionAlgorithm.A256CTR, key, iv, DataStream.fromBytes(inputBytes));
68
+ const plaintextStream = await Encryption.decryptStream(ContentEncryptionAlgorithm.A256CTR, key, iv, ciphertextStream);
74
69
  const plaintextBytes = await DataStream.toBytes(plaintextStream);
75
70
  expect(ArrayUtility.byteArraysEqual(inputBytes, plaintextBytes)).toBe(true);
76
71
  });
77
- it('should handle boundary plaintext sizes via byte API', async () => {
72
+ it('should handle boundary plaintext sizes', async () => {
78
73
  const key = TestDataGenerator.randomBytes(32);
79
- const nonce = TestDataGenerator.randomBytes(24);
74
+ const iv = TestDataGenerator.randomBytes(16);
80
75
  for (const size of boundarySizes) {
81
76
  const inputBytes = size === 0 ? new Uint8Array(0) : TestDataGenerator.randomBytes(size);
82
- const { ciphertext, tag } = await Encryption.aeadEncrypt(ContentEncryptionAlgorithm.XC20P, key, nonce, inputBytes);
83
- const plaintext = await Encryption.aeadDecrypt(ContentEncryptionAlgorithm.XC20P, key, nonce, ciphertext, tag);
77
+ const ciphertext = await Encryption.encrypt(ContentEncryptionAlgorithm.A256CTR, key, iv, inputBytes);
78
+ const plaintext = await Encryption.decrypt(ContentEncryptionAlgorithm.A256CTR, key, iv, ciphertext);
84
79
  expect(plaintext.length).toBe(size);
85
80
  expect(ArrayUtility.byteArraysEqual(inputBytes, plaintext)).toBe(true);
86
81
  }
87
82
  });
88
- it('should handle boundary plaintext sizes via stream API', async () => {
89
- const key = TestDataGenerator.randomBytes(32);
90
- const nonce = TestDataGenerator.randomBytes(24);
91
- for (const size of boundarySizes) {
92
- const inputBytes = size === 0 ? new Uint8Array(0) : TestDataGenerator.randomBytes(size);
93
- const inputStream = DataStream.fromBytes(inputBytes);
94
- const { ciphertextStream, tag } = await Encryption.aeadEncryptStream(ContentEncryptionAlgorithm.XC20P, key, nonce, inputStream);
95
- const plaintextStream = await Encryption.aeadDecryptStream(ContentEncryptionAlgorithm.XC20P, key, nonce, ciphertextStream, tag);
96
- const plaintextBytes = await DataStream.toBytes(plaintextStream);
97
- expect(plaintextBytes.length).toBe(size);
98
- expect(ArrayUtility.byteArraysEqual(inputBytes, plaintextBytes)).toBe(true);
99
- }
100
- });
101
83
  });
102
- describe('ECDH-ES+A256KW', () => {
103
- it('should be able to wrap and unwrap a CEK correctly', async () => {
84
+ describe('X25519-HKDF-SHA256+A256KW', () => {
85
+ it('should wrap and unwrap a CEK correctly', async () => {
104
86
  const recipientPrivateKey = await X25519.generateKey();
105
87
  const recipientPublicKey = await X25519.getPublicKey({ key: recipientPrivateKey });
106
- const ephemeralPrivateKey = await X25519.generateKey();
107
88
  const cek = TestDataGenerator.randomBytes(32);
108
- const wrappedKey = await Encryption.ecdhEsWrapKey(ephemeralPrivateKey, recipientPublicKey, cek);
109
- const ephemeralPublicKey = await X25519.getPublicKey({ key: ephemeralPrivateKey });
110
- const unwrappedCek = await Encryption.ecdhEsUnwrapKey(recipientPrivateKey, ephemeralPublicKey, wrappedKey);
89
+ const keyId = await Encryption.getKeyId(recipientPublicKey);
90
+ const { encryptedKey, ephemeralPublicKey } = await Encryption.wrapKey(recipientPublicKey, cek, { derivationScheme: KeyDerivationScheme.ProtocolPath, keyId, publicKey: recipientPublicKey });
91
+ const unwrappedCek = await Encryption.unwrapKey(recipientPrivateKey, {
92
+ algorithm: KeyAgreementAlgorithm.X25519HkdfSha256A256Kw,
93
+ derivationScheme: KeyDerivationScheme.ProtocolPath,
94
+ encryptedKey: Encoder.bytesToBase64Url(encryptedKey),
95
+ ephemeralPublicKey,
96
+ keyId,
97
+ });
111
98
  expect(ArrayUtility.byteArraysEqual(cek, unwrappedCek)).toBe(true);
112
99
  });
113
100
  it('should produce different wrapped keys for the same CEK and recipient', async () => {
114
101
  const recipientPrivateKey = await X25519.generateKey();
115
102
  const recipientPublicKey = await X25519.getPublicKey({ key: recipientPrivateKey });
116
103
  const cek = TestDataGenerator.randomBytes(32);
117
- // Wrap the same CEK twice with different ephemeral keys
118
- const ephemeralKey1 = await X25519.generateKey();
119
- const ephemeralKey2 = await X25519.generateKey();
120
- const wrappedKey1 = await Encryption.ecdhEsWrapKey(ephemeralKey1, recipientPublicKey, cek);
121
- const wrappedKey2 = await Encryption.ecdhEsWrapKey(ephemeralKey2, recipientPublicKey, cek);
122
- // Different ephemeral keys must produce different wrapped keys
123
- expect(ArrayUtility.byteArraysEqual(wrappedKey1, wrappedKey2)).toBe(false);
124
- // Both must still unwrap to the same CEK
125
- const epk1 = await X25519.getPublicKey({ key: ephemeralKey1 });
126
- const epk2 = await X25519.getPublicKey({ key: ephemeralKey2 });
127
- const unwrapped1 = await Encryption.ecdhEsUnwrapKey(recipientPrivateKey, epk1, wrappedKey1);
128
- const unwrapped2 = await Encryption.ecdhEsUnwrapKey(recipientPrivateKey, epk2, wrappedKey2);
104
+ const keyId = await Encryption.getKeyId(recipientPublicKey);
105
+ const keyInput = { derivationScheme: KeyDerivationScheme.ProtocolPath, keyId, publicKey: recipientPublicKey };
106
+ const wrappedKey1 = await Encryption.wrapKey(recipientPublicKey, cek, keyInput);
107
+ const wrappedKey2 = await Encryption.wrapKey(recipientPublicKey, cek, keyInput);
108
+ expect(ArrayUtility.byteArraysEqual(wrappedKey1.encryptedKey, wrappedKey2.encryptedKey)).toBe(false);
109
+ const unwrapped1 = await Encryption.unwrapKey(recipientPrivateKey, {
110
+ algorithm: KeyAgreementAlgorithm.X25519HkdfSha256A256Kw,
111
+ derivationScheme: KeyDerivationScheme.ProtocolPath,
112
+ encryptedKey: Encoder.bytesToBase64Url(wrappedKey1.encryptedKey),
113
+ ephemeralPublicKey: wrappedKey1.ephemeralPublicKey,
114
+ keyId,
115
+ });
116
+ const unwrapped2 = await Encryption.unwrapKey(recipientPrivateKey, {
117
+ algorithm: KeyAgreementAlgorithm.X25519HkdfSha256A256Kw,
118
+ derivationScheme: KeyDerivationScheme.ProtocolPath,
119
+ encryptedKey: Encoder.bytesToBase64Url(wrappedKey2.encryptedKey),
120
+ ephemeralPublicKey: wrappedKey2.ephemeralPublicKey,
121
+ keyId,
122
+ });
129
123
  expect(ArrayUtility.byteArraysEqual(unwrapped1, cek)).toBe(true);
130
124
  expect(ArrayUtility.byteArraysEqual(unwrapped2, cek)).toBe(true);
131
125
  });
132
126
  });
133
- describe('buildJwe', () => {
134
- it('should build a valid JWE structure with recipients', async () => {
135
- const recipientPrivateKey = await X25519.generateKey();
136
- const recipientPublicKey = await X25519.getPublicKey({ key: recipientPrivateKey });
137
- const cek = TestDataGenerator.randomBytes(32);
138
- const iv = TestDataGenerator.randomBytes(12);
139
- const tag = TestDataGenerator.randomBytes(16);
140
- const jwe = await Encryption.buildJwe({
141
- key: cek,
142
- initializationVector: iv,
143
- authenticationTag: tag,
144
- keyEncryptionInputs: [{
145
- publicKeyId: 'did:example:alice#enc',
146
- publicKey: recipientPublicKey,
147
- derivationScheme: 'protocolPath',
148
- }],
149
- }, tag);
150
- expect(jwe.protected).toBeDefined();
151
- expect(jwe.iv).toBeDefined();
152
- expect(jwe.tag).toBeDefined();
153
- expect(jwe.recipients).toHaveLength(1);
154
- expect(jwe.recipients[0].header.kid).toBe('did:example:alice#enc');
155
- expect(jwe.recipients[0].header.epk).toBeDefined();
156
- expect(jwe.recipients[0].encrypted_key).toBeDefined();
157
- // Verify protected header
158
- const protectedHeader = Encryption.parseProtectedHeader(jwe.protected);
159
- expect(protectedHeader.alg).toBe('ECDH-ES+A256KW');
160
- expect(protectedHeader.enc).toBe('A256GCM');
161
- });
162
- it('should produce different ephemeral keys and wrapped CEKs for identical inputs', async () => {
127
+ describe('buildEncryptionProperty', () => {
128
+ it('should build a valid RecordsWrite encryption object', async () => {
163
129
  const recipientPrivateKey = await X25519.generateKey();
164
130
  const recipientPublicKey = await X25519.getPublicKey({ key: recipientPrivateKey });
165
131
  const cek = TestDataGenerator.randomBytes(32);
166
- const iv = TestDataGenerator.randomBytes(12);
167
- const tag = TestDataGenerator.randomBytes(16);
168
- const encryptionInput = {
169
- key: cek,
132
+ const iv = TestDataGenerator.randomBytes(16);
133
+ const keyId = await Encryption.getKeyId(recipientPublicKey);
134
+ const encryption = await Encryption.buildEncryptionProperty({
170
135
  initializationVector: iv,
171
- authenticationTag: tag,
172
- keyEncryptionInputs: [{
173
- publicKeyId: 'did:example:alice#enc',
174
- publicKey: recipientPublicKey,
175
- derivationScheme: 'protocolPath',
176
- }],
177
- };
178
- const jwe1 = await Encryption.buildJwe(encryptionInput, tag);
179
- const jwe2 = await Encryption.buildJwe(encryptionInput, tag);
180
- // Each call generates a fresh ephemeral key pair — epk values must differ
181
- const epk1 = jwe1.recipients[0].header.epk;
182
- const epk2 = jwe2.recipients[0].header.epk;
183
- expect(JSON.stringify(epk1)).not.toBe(JSON.stringify(epk2));
184
- // Different ephemeral keys produce different wrapped CEKs
185
- expect(jwe1.recipients[0].encrypted_key).not.toBe(jwe2.recipients[0].encrypted_key);
186
- // Both wrapped CEKs must still unwrap to the same original CEK
187
- const unwrapped1 = await Encryption.ecdhEsUnwrapKey(recipientPrivateKey, epk1, Encoder.base64UrlToBytes(jwe1.recipients[0].encrypted_key));
188
- const unwrapped2 = await Encryption.ecdhEsUnwrapKey(recipientPrivateKey, epk2, Encoder.base64UrlToBytes(jwe2.recipients[0].encrypted_key));
189
- expect(ArrayUtility.byteArraysEqual(unwrapped1, cek)).toBe(true);
190
- expect(ArrayUtility.byteArraysEqual(unwrapped2, cek)).toBe(true);
191
- });
192
- it('should attach derivedPublicKey for ProtocolContext scheme', async () => {
193
- const recipientPrivateKey = await X25519.generateKey();
194
- const recipientPublicKey = await X25519.getPublicKey({ key: recipientPrivateKey });
195
- const cek = TestDataGenerator.randomBytes(32);
196
- const iv = TestDataGenerator.randomBytes(12);
197
- const tag = TestDataGenerator.randomBytes(16);
198
- const jwe = await Encryption.buildJwe({
199
136
  key: cek,
200
- initializationVector: iv,
201
- authenticationTag: tag,
202
137
  keyEncryptionInputs: [{
203
- publicKeyId: 'did:example:alice#enc',
204
- publicKey: recipientPublicKey,
205
- derivationScheme: KeyDerivationScheme.ProtocolContext,
206
- }],
207
- }, tag);
208
- // ProtocolContext recipients should have derivedPublicKey set to the input public key
209
- expect(jwe.recipients).toHaveLength(1);
210
- expect(jwe.recipients[0].header.derivedPublicKey).toBeDefined();
211
- expect(jwe.recipients[0].header.derivedPublicKey.kty).toBe(recipientPublicKey.kty);
212
- });
213
- it('should not attach derivedPublicKey for non-ProtocolContext schemes', async () => {
214
- const recipientPrivateKey = await X25519.generateKey();
215
- const recipientPublicKey = await X25519.getPublicKey({ key: recipientPrivateKey });
216
- const cek = TestDataGenerator.randomBytes(32);
217
- const iv = TestDataGenerator.randomBytes(12);
218
- const tag = TestDataGenerator.randomBytes(16);
219
- const jwe = await Encryption.buildJwe({
220
- key: cek,
221
- initializationVector: iv,
222
- authenticationTag: tag,
223
- keyEncryptionInputs: [{
224
- publicKeyId: 'did:example:alice#enc',
225
- publicKey: recipientPublicKey,
226
138
  derivationScheme: KeyDerivationScheme.ProtocolPath,
139
+ keyId,
140
+ publicKey: recipientPublicKey,
227
141
  }],
228
- }, tag);
229
- // Non-ProtocolContext recipients should NOT have derivedPublicKey
230
- expect(jwe.recipients).toHaveLength(1);
231
- expect(jwe.recipients[0].header.derivedPublicKey).toBeUndefined();
232
- });
233
- });
234
- describe('error handling', () => {
235
- it('should throw on corrupted ciphertext (wrong tag)', async () => {
236
- const key = TestDataGenerator.randomBytes(32);
237
- const iv = TestDataGenerator.randomBytes(12);
238
- const plaintext = TestDataGenerator.randomBytes(64);
239
- const { ciphertext } = await Encryption.aeadEncrypt(ContentEncryptionAlgorithm.A256GCM, key, iv, plaintext);
240
- // Use a wrong tag
241
- const wrongTag = TestDataGenerator.randomBytes(16);
242
- await expect(Encryption.aeadDecrypt(ContentEncryptionAlgorithm.A256GCM, key, iv, ciphertext, wrongTag)).rejects.toThrow();
243
- });
244
- it('should throw on corrupted ciphertext stream (wrong tag)', async () => {
245
- const key = TestDataGenerator.randomBytes(32);
246
- const iv = TestDataGenerator.randomBytes(12);
247
- const plaintext = TestDataGenerator.randomBytes(64);
248
- const plaintextStream = DataStream.fromBytes(plaintext);
249
- const { ciphertextStream } = await Encryption.aeadEncryptStream(ContentEncryptionAlgorithm.A256GCM, key, iv, plaintextStream);
250
- // Use a wrong tag to trigger decryption error
251
- const wrongTag = TestDataGenerator.randomBytes(16);
252
- await expect(Encryption.aeadDecryptStream(ContentEncryptionAlgorithm.A256GCM, key, iv, ciphertextStream, wrongTag)).rejects.toThrow();
253
- });
254
- it('should throw on decryption with wrong key', async () => {
255
- const key = TestDataGenerator.randomBytes(32);
256
- const wrongKey = TestDataGenerator.randomBytes(32);
257
- const iv = TestDataGenerator.randomBytes(12);
258
- const plaintext = TestDataGenerator.randomBytes(64);
259
- const { ciphertext, tag } = await Encryption.aeadEncrypt(ContentEncryptionAlgorithm.A256GCM, key, iv, plaintext);
260
- await expect(Encryption.aeadDecrypt(ContentEncryptionAlgorithm.A256GCM, wrongKey, iv, ciphertext, tag)).rejects.toThrow();
261
- });
262
- it('should throw for unsupported algorithm in aeadEncrypt', async () => {
263
- const key = TestDataGenerator.randomBytes(32);
264
- const iv = TestDataGenerator.randomBytes(12);
265
- const plaintext = TestDataGenerator.randomBytes(64);
266
- await expect(Encryption.aeadEncrypt('INVALID_ALG', key, iv, plaintext)).rejects.toThrow('Unsupported content encryption algorithm');
267
- });
268
- it('should throw for unsupported algorithm in aeadDecrypt', async () => {
269
- const key = TestDataGenerator.randomBytes(32);
270
- const iv = TestDataGenerator.randomBytes(12);
271
- const ciphertext = TestDataGenerator.randomBytes(64);
272
- const tag = TestDataGenerator.randomBytes(16);
273
- await expect(Encryption.aeadDecrypt('INVALID_ALG', key, iv, ciphertext, tag)).rejects.toThrow('Unsupported content encryption algorithm');
142
+ });
143
+ expect(encryption.algorithm).toBe(ContentEncryptionAlgorithm.A256CTR);
144
+ expect(encryption.initializationVector).toBe(Encoder.bytesToBase64Url(iv));
145
+ expect(encryption.keyEncryption).toHaveLength(1);
146
+ expect(encryption.keyEncryption[0].keyId).toBe(keyId);
147
+ expect(encryption.keyEncryption[0].derivationScheme).toBe(KeyDerivationScheme.ProtocolPath);
148
+ const unwrappedCek = await Encryption.unwrapKey(recipientPrivateKey, encryption.keyEncryption[0]);
149
+ expect(ArrayUtility.byteArraysEqual(unwrappedCek, cek)).toBe(true);
274
150
  });
275
151
  });
276
152
  describe('Records.decrypt', () => {
277
153
  it('should throw when message has no encryption property', async () => {
278
- // Create a minimal RecordsWriteMessage without encryption
279
154
  const messageWithoutEncryption = {
280
155
  descriptor: {
281
- interface: 'Records',
282
- method: 'Write',
283
156
  dataCid: 'bafyreib3e4uj32nq5ql3q',
157
+ dataFormat: 'application/json',
284
158
  dataSize: 100,
285
159
  dateCreated: '2024-01-01T00:00:00.000000Z',
160
+ interface: 'Records',
286
161
  messageTimestamp: '2024-01-01T00:00:00.000000Z',
287
- dataFormat: 'application/json',
162
+ method: 'Write',
163
+ protocol: 'https://example.com/protocol',
164
+ protocolPath: 'note',
288
165
  },
289
- // no encryption property
290
166
  };
291
167
  const dummyKey = await X25519.generateKey();
292
- const cipherStream = DataStream.fromBytes(TestDataGenerator.randomBytes(32));
293
168
  await expect(Records.decrypt(messageWithoutEncryption, {
169
+ derivedPrivateKey: dummyKey,
170
+ derivationScheme: KeyDerivationScheme.ProtocolPath,
294
171
  rootKeyId: 'did:example:alice#enc',
172
+ }, DataStream.fromBytes(TestDataGenerator.randomBytes(32)))).rejects.toThrow(DwnErrorCode.RecordsDecryptNoMatchingKeyEncryptedFound);
173
+ });
174
+ it('should validate encrypted data CID before returning plaintext', async () => {
175
+ const { ciphertext, message, recipientPrivateKey, } = await createEncryptedRecordFixture(Encoder.stringToBytes('secret'));
176
+ const wrongCiphertext = TestDataGenerator.randomBytes(ciphertext.length);
177
+ await expect(Records.decrypt(message, {
178
+ derivedPrivateKey: recipientPrivateKey,
295
179
  derivationScheme: KeyDerivationScheme.ProtocolPath,
296
- derivedPrivateKey: dummyKey,
297
- }, cipherStream)).rejects.toThrow(DwnErrorCode.RecordsDecryptNoMatchingKeyEncryptedFound);
180
+ rootKeyId: 'did:example:alice#enc',
181
+ }, DataStream.fromBytes(wrongCiphertext))).rejects.toThrow(DwnErrorCode.RecordsWriteDataCidMismatch);
298
182
  });
299
183
  it('should propagate errors thrown by KeyDecrypter.decrypt()', async () => {
300
- // Build a minimal encrypted message that has enough structure to reach the callback path
301
- const recipientPrivateKey = await X25519.generateKey();
302
- const recipientPublicKey = await X25519.getPublicKey({ key: recipientPrivateKey });
303
- const cek = TestDataGenerator.randomBytes(32);
304
- const iv = TestDataGenerator.randomBytes(12);
305
- const plaintext = TestDataGenerator.randomBytes(64);
306
- const { tag } = await Encryption.aeadEncrypt(ContentEncryptionAlgorithm.A256GCM, cek, iv, plaintext);
307
- const jwe = await Encryption.buildJwe({
308
- key: cek,
309
- initializationVector: iv,
310
- authenticationTag: tag,
311
- keyEncryptionInputs: [{
312
- publicKeyId: 'did:example:alice#enc',
313
- publicKey: recipientPublicKey,
314
- derivationScheme: KeyDerivationScheme.ProtocolPath,
315
- }],
316
- }, tag);
317
- // Construct a minimal RecordsWriteMessage with the JWE encryption property
318
- const message = {
319
- descriptor: {
320
- interface: 'Records',
321
- method: 'Write',
322
- dataCid: 'bafyreib3e4uj32nq5ql3q',
323
- dataSize: 100,
324
- dateCreated: '2024-01-01T00:00:00.000000Z',
325
- messageTimestamp: '2024-01-01T00:00:00.000000Z',
326
- dataFormat: 'application/json',
327
- protocol: 'https://example.com/protocol',
328
- protocolPath: 'foo',
329
- },
330
- encryption: jwe,
331
- recordId: 'test-record-id',
332
- };
333
- // Create a KeyDecrypter that throws an error
184
+ const { ciphertext, message, recipientPublicKey, } = await createEncryptedRecordFixture();
334
185
  const failingDecrypter = {
335
- rootKeyId: 'did:example:alice#enc',
336
- derivationScheme: KeyDerivationScheme.ProtocolPath,
337
186
  decrypt: async () => {
338
187
  throw new Error('KeyDecrypter: key derivation failed');
339
188
  },
189
+ derivationScheme: KeyDerivationScheme.ProtocolPath,
190
+ derivePublicKey: async () => recipientPublicKey,
191
+ rootKeyId: 'did:example:alice#enc',
340
192
  };
341
- const cipherStream = DataStream.fromBytes(TestDataGenerator.randomBytes(64));
342
- // The error from KeyDecrypter.decrypt() should propagate directly
343
- await expect(Records.decrypt(message, failingDecrypter, cipherStream)).rejects.toThrow('KeyDecrypter: key derivation failed');
193
+ await expect(Records.decrypt(message, failingDecrypter, DataStream.fromBytes(ciphertext))).rejects.toThrow('KeyDecrypter: key derivation failed');
344
194
  });
345
195
  });
346
196
  });
@@ -1 +1 @@
1
- {"version":3,"file":"encryption.spec.js","sourceRoot":"","sources":["../../../../tests/utils/encryption.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"encryption.spec.js","sourceRoot":"","sources":["../../../../tests/utils/encryption.spec.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ describe('PermissionScopeMatcher', () => {
8
8
  expect(PermissionScopeMatcher.matches({ protocol: 'https://example.com/protocol' }, { protocol: 'https://example.com/protocol' })).toBe(true);
9
9
  expect(PermissionScopeMatcher.matches({ protocol: 'https://example.com/protocol' }, { protocol: 'https://example.com/protocol-sibling' })).toBe(false);
10
10
  });
11
- it('matches protocolPath scopes exactly', () => {
11
+ it('matches protocolPath scopes by subtree', () => {
12
12
  const scope = {
13
13
  protocol: 'https://example.com/protocol',
14
14
  protocolPath: 'thread/message',
@@ -20,6 +20,10 @@ describe('PermissionScopeMatcher', () => {
20
20
  expect(PermissionScopeMatcher.matches(scope, {
21
21
  protocol: 'https://example.com/protocol',
22
22
  protocolPath: 'thread/message/reaction',
23
+ })).toBe(true);
24
+ expect(PermissionScopeMatcher.matches(scope, {
25
+ protocol: 'https://example.com/protocol',
26
+ protocolPath: 'thread/messageEvil',
23
27
  })).toBe(false);
24
28
  });
25
29
  it('matches contextId scopes by context subtree', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"permission-scope.spec.js","sourceRoot":"","sources":["../../../../tests/utils/permission-scope.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permission-scope.spec.js","sourceRoot":"","sources":["../../../../tests/utils/permission-scope.spec.ts"],"names":[],"mappings":"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"}
@@ -31,11 +31,21 @@ describe('Records', () => {
31
31
  const path = Records.constructKeyDerivationPathUsingProtocolPathScheme(descriptor);
32
32
  expect(path).toEqual([KeyDerivationScheme.ProtocolPath, 'http://test-protocol.xyz', 'testRecord']);
33
33
  });
34
- });
35
- describe('constructKeyDerivationPathUsingProtocolContextScheme()', () => {
36
- it('should construct a valid key derivation path using protocol context scheme', async () => {
37
- const path = Records.constructKeyDerivationPathUsingProtocolContextScheme('rootId/childId');
38
- expect(path).toEqual([KeyDerivationScheme.ProtocolContext, 'rootId']);
34
+ it('should throw a scheme-specific error for unsupported derivation schemes', () => {
35
+ const message = {
36
+ descriptor: {
37
+ interface: DwnInterfaceName.Records,
38
+ method: DwnMethodName.Write,
39
+ dataCid: 'anyCid',
40
+ dataFormat: 'application/json',
41
+ dataSize: 123,
42
+ dateCreated: '2022-12-19T10:20:30.123456Z',
43
+ messageTimestamp: '2022-12-19T10:20:30.123456Z',
44
+ protocol: 'http://test-protocol.xyz',
45
+ protocolPath: 'testRecord',
46
+ },
47
+ };
48
+ expect(() => Records.constructKeyDerivationPath('unsupported', message)).toThrow(DwnErrorCode.RecordsDecryptUnsupportedKeyDerivationScheme);
39
49
  });
40
50
  });
41
51
  describe('convertDateSort()', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"records.spec.js","sourceRoot":"","sources":["../../../../tests/utils/records.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"records.spec.js","sourceRoot":"","sources":["../../../../tests/utils/records.spec.ts"],"names":[],"mappings":"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"}