cojson 0.0.6 → 0.0.8

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 (74) hide show
  1. package/.eslintrc.cjs +11 -8
  2. package/dist/coValue.d.ts +97 -0
  3. package/dist/coValue.js +341 -401
  4. package/dist/coValue.js.map +1 -0
  5. package/dist/coValue.test.d.ts +1 -0
  6. package/dist/coValue.test.js +69 -113
  7. package/dist/coValue.test.js.map +1 -0
  8. package/dist/contentType.d.ts +15 -0
  9. package/dist/contentType.js +5 -5
  10. package/dist/contentType.js.map +1 -0
  11. package/dist/contentType.test.d.ts +1 -0
  12. package/dist/contentType.test.js +138 -168
  13. package/dist/contentType.test.js.map +1 -0
  14. package/dist/contentTypes/coList.d.ts +11 -0
  15. package/dist/contentTypes/coList.js +14 -16
  16. package/dist/contentTypes/coList.js.map +1 -0
  17. package/dist/contentTypes/coMap.d.ts +56 -0
  18. package/dist/contentTypes/coMap.js +112 -112
  19. package/dist/contentTypes/coMap.js.map +1 -0
  20. package/dist/contentTypes/coStream.d.ts +11 -0
  21. package/dist/contentTypes/coStream.js +14 -16
  22. package/dist/contentTypes/coStream.js.map +1 -0
  23. package/dist/contentTypes/static.d.ts +11 -0
  24. package/dist/contentTypes/static.js +12 -14
  25. package/dist/contentTypes/static.js.map +1 -0
  26. package/dist/crypto.d.ts +97 -0
  27. package/dist/crypto.js +100 -151
  28. package/dist/crypto.js.map +1 -0
  29. package/dist/crypto.test.d.ts +1 -0
  30. package/dist/crypto.test.js +94 -134
  31. package/dist/crypto.test.js.map +1 -0
  32. package/dist/ids.d.ts +7 -0
  33. package/dist/ids.js +2 -1
  34. package/dist/ids.js.map +1 -0
  35. package/dist/index.d.ts +19 -0
  36. package/dist/index.js +10 -18
  37. package/dist/index.js.map +1 -0
  38. package/dist/jsonValue.d.ts +7 -0
  39. package/dist/jsonValue.js +2 -1
  40. package/dist/jsonValue.js.map +1 -0
  41. package/dist/node.d.ts +33 -0
  42. package/dist/node.js +102 -133
  43. package/dist/node.js.map +1 -0
  44. package/dist/permissions.d.ts +54 -0
  45. package/dist/permissions.js +202 -228
  46. package/dist/permissions.js.map +1 -0
  47. package/dist/permissions.test.d.ts +1 -0
  48. package/dist/permissions.test.js +724 -915
  49. package/dist/permissions.test.js.map +1 -0
  50. package/dist/sync.d.ts +80 -0
  51. package/dist/sync.js +247 -294
  52. package/dist/sync.js.map +1 -0
  53. package/dist/sync.test.d.ts +1 -0
  54. package/dist/sync.test.js +763 -798
  55. package/dist/sync.test.js.map +1 -0
  56. package/package.json +7 -4
  57. package/src/coValue.test.ts +3 -4
  58. package/src/coValue.ts +11 -17
  59. package/src/contentType.test.ts +3 -3
  60. package/src/contentType.ts +6 -6
  61. package/src/contentTypes/coList.ts +4 -4
  62. package/src/contentTypes/coMap.ts +6 -6
  63. package/src/contentTypes/coStream.ts +4 -4
  64. package/src/contentTypes/static.ts +5 -5
  65. package/src/crypto.test.ts +1 -1
  66. package/src/crypto.ts +2 -2
  67. package/src/index.ts +9 -7
  68. package/src/jsonValue.ts +1 -1
  69. package/src/node.ts +6 -7
  70. package/src/permissions.test.ts +5 -5
  71. package/src/permissions.ts +7 -7
  72. package/src/sync.test.ts +7 -7
  73. package/src/sync.ts +6 -6
  74. package/tsconfig.json +1 -7
package/dist/crypto.js CHANGED
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import { ed25519, x25519 } from "@noble/curves/ed25519";
3
2
  import { xsalsa20_poly1305, xsalsa20 } from "@noble/ciphers/salsa";
4
3
  import { base58, base64url } from "@scure/base";
@@ -8,200 +7,150 @@ import { randomBytes } from "@noble/ciphers/webcrypto/utils";
8
7
  const textEncoder = new TextEncoder();
9
8
  const textDecoder = new TextDecoder();
10
9
  export function newRandomSignatory() {
11
- return `signatorySecret_z${base58.encode(
12
- ed25519.utils.randomPrivateKey()
13
- )}`;
10
+ return `signatorySecret_z${base58.encode(ed25519.utils.randomPrivateKey())}`;
14
11
  }
15
12
  export function signatorySecretToBytes(secret) {
16
- return base58.decode(secret.substring("signatorySecret_z".length));
13
+ return base58.decode(secret.substring("signatorySecret_z".length));
17
14
  }
18
15
  export function signatorySecretFromBytes(bytes) {
19
- return `signatorySecret_z${base58.encode(bytes)}`;
16
+ return `signatorySecret_z${base58.encode(bytes)}`;
20
17
  }
21
18
  export function getSignatoryID(secret) {
22
- return `signatory_z${base58.encode(
23
- ed25519.getPublicKey(
24
- base58.decode(secret.substring("signatorySecret_z".length))
25
- )
26
- )}`;
19
+ return `signatory_z${base58.encode(ed25519.getPublicKey(base58.decode(secret.substring("signatorySecret_z".length))))}`;
27
20
  }
28
21
  export function sign(secret, message) {
29
- const signature = ed25519.sign(
30
- textEncoder.encode(stableStringify(message)),
31
- base58.decode(secret.substring("signatorySecret_z".length))
32
- );
33
- return `signature_z${base58.encode(signature)}`;
22
+ const signature = ed25519.sign(textEncoder.encode(stableStringify(message)), base58.decode(secret.substring("signatorySecret_z".length)));
23
+ return `signature_z${base58.encode(signature)}`;
34
24
  }
35
25
  export function verify(signature, message, id) {
36
- return ed25519.verify(
37
- base58.decode(signature.substring("signature_z".length)),
38
- textEncoder.encode(stableStringify(message)),
39
- base58.decode(id.substring("signatory_z".length))
40
- );
26
+ return ed25519.verify(base58.decode(signature.substring("signature_z".length)), textEncoder.encode(stableStringify(message)), base58.decode(id.substring("signatory_z".length)));
41
27
  }
42
28
  export function newRandomRecipient() {
43
- return `recipientSecret_z${base58.encode(x25519.utils.randomPrivateKey())}`;
29
+ return `recipientSecret_z${base58.encode(x25519.utils.randomPrivateKey())}`;
44
30
  }
45
31
  export function recipientSecretToBytes(secret) {
46
- return base58.decode(secret.substring("recipientSecret_z".length));
32
+ return base58.decode(secret.substring("recipientSecret_z".length));
47
33
  }
48
34
  export function recipientSecretFromBytes(bytes) {
49
- return `recipientSecret_z${base58.encode(bytes)}`;
35
+ return `recipientSecret_z${base58.encode(bytes)}`;
50
36
  }
51
37
  export function getRecipientID(secret) {
52
- return `recipient_z${base58.encode(
53
- x25519.getPublicKey(
54
- base58.decode(secret.substring("recipientSecret_z".length))
55
- )
56
- )}`;
38
+ return `recipient_z${base58.encode(x25519.getPublicKey(base58.decode(secret.substring("recipientSecret_z".length))))}`;
57
39
  }
58
40
  export function seal(message, from, to, nOnceMaterial) {
59
- const nOnce = blake3(
60
- textEncoder.encode(stableStringify(nOnceMaterial))
61
- ).slice(0, 24);
62
- const recipientsSorted = Array.from(to).sort();
63
- const recipientPubs = recipientsSorted.map((recipient) => {
64
- return base58.decode(recipient.substring("recipient_z".length));
65
- });
66
- const senderPriv = base58.decode(
67
- from.substring("recipientSecret_z".length)
68
- );
69
- const plaintext = textEncoder.encode(stableStringify(message));
70
- const sealedSet = {};
71
- for (let i = 0; i < recipientsSorted.length; i++) {
72
- const recipient = recipientsSorted[i];
73
- const sharedSecret = x25519.getSharedSecret(
74
- senderPriv,
75
- recipientPubs[i]
76
- );
77
- const sealedBytes = xsalsa20_poly1305(sharedSecret, nOnce).encrypt(
78
- plaintext
79
- );
80
- sealedSet[recipient] = `sealed_U${base64url.encode(
81
- sealedBytes
82
- )}`;
83
- }
84
- return sealedSet;
41
+ const nOnce = blake3(textEncoder.encode(stableStringify(nOnceMaterial))).slice(0, 24);
42
+ const recipientsSorted = Array.from(to).sort();
43
+ const recipientPubs = recipientsSorted.map((recipient) => {
44
+ return base58.decode(recipient.substring("recipient_z".length));
45
+ });
46
+ const senderPriv = base58.decode(from.substring("recipientSecret_z".length));
47
+ const plaintext = textEncoder.encode(stableStringify(message));
48
+ const sealedSet = {};
49
+ for (let i = 0; i < recipientsSorted.length; i++) {
50
+ const recipient = recipientsSorted[i];
51
+ const sharedSecret = x25519.getSharedSecret(senderPriv, recipientPubs[i]);
52
+ const sealedBytes = xsalsa20_poly1305(sharedSecret, nOnce).encrypt(plaintext);
53
+ sealedSet[recipient] = `sealed_U${base64url.encode(sealedBytes)}`;
54
+ }
55
+ return sealedSet;
85
56
  }
86
57
  export function openAs(sealedSet, recipient, from, nOnceMaterial) {
87
- const nOnce = blake3(
88
- textEncoder.encode(stableStringify(nOnceMaterial))
89
- ).slice(0, 24);
90
- const recipientPriv = base58.decode(
91
- recipient.substring("recipientSecret_z".length)
92
- );
93
- const senderPub = base58.decode(from.substring("recipient_z".length));
94
- const sealed = sealedSet[getRecipientID(recipient)];
95
- if (!sealed) {
96
- return void 0;
97
- }
98
- const sealedBytes = base64url.decode(sealed.substring("sealed_U".length));
99
- const sharedSecret = x25519.getSharedSecret(recipientPriv, senderPub);
100
- const plaintext = xsalsa20_poly1305(sharedSecret, nOnce).decrypt(
101
- sealedBytes
102
- );
103
- try {
104
- return JSON.parse(textDecoder.decode(plaintext));
105
- } catch (e) {
106
- console.error("Failed to decrypt/parse sealed message", e);
107
- return void 0;
108
- }
58
+ const nOnce = blake3(textEncoder.encode(stableStringify(nOnceMaterial))).slice(0, 24);
59
+ const recipientPriv = base58.decode(recipient.substring("recipientSecret_z".length));
60
+ const senderPub = base58.decode(from.substring("recipient_z".length));
61
+ const sealed = sealedSet[getRecipientID(recipient)];
62
+ if (!sealed) {
63
+ return undefined;
64
+ }
65
+ const sealedBytes = base64url.decode(sealed.substring("sealed_U".length));
66
+ const sharedSecret = x25519.getSharedSecret(recipientPriv, senderPub);
67
+ const plaintext = xsalsa20_poly1305(sharedSecret, nOnce).decrypt(sealedBytes);
68
+ try {
69
+ return JSON.parse(textDecoder.decode(plaintext));
70
+ }
71
+ catch (e) {
72
+ console.error("Failed to decrypt/parse sealed message", e);
73
+ return undefined;
74
+ }
109
75
  }
110
76
  export function secureHash(value) {
111
- return `hash_z${base58.encode(
112
- blake3(textEncoder.encode(stableStringify(value)))
113
- )}`;
77
+ return `hash_z${base58.encode(blake3(textEncoder.encode(stableStringify(value))))}`;
114
78
  }
115
79
  export class StreamingHash {
116
- state;
117
- constructor(fromClone) {
118
- this.state = fromClone || blake3.create({});
119
- }
120
- update(value) {
121
- this.state.update(textEncoder.encode(stableStringify(value)));
122
- }
123
- digest() {
124
- const hash = this.state.digest();
125
- return `hash_z${base58.encode(hash)}`;
126
- }
127
- clone() {
128
- return new StreamingHash(this.state.clone());
129
- }
80
+ constructor(fromClone) {
81
+ this.state = fromClone || blake3.create({});
82
+ }
83
+ update(value) {
84
+ this.state.update(textEncoder.encode(stableStringify(value)));
85
+ }
86
+ digest() {
87
+ const hash = this.state.digest();
88
+ return `hash_z${base58.encode(hash)}`;
89
+ }
90
+ clone() {
91
+ return new StreamingHash(this.state.clone());
92
+ }
130
93
  }
131
94
  export function shortHash(value) {
132
- return `shortHash_z${base58.encode(
133
- blake3(textEncoder.encode(stableStringify(value))).slice(0, 19)
134
- )}`;
95
+ return `shortHash_z${base58.encode(blake3(textEncoder.encode(stableStringify(value))).slice(0, 19))}`;
135
96
  }
136
97
  export function newRandomKeySecret() {
137
- return {
138
- secret: `keySecret_z${base58.encode(randomBytes(32))}`,
139
- id: `key_z${base58.encode(randomBytes(12))}`
140
- };
98
+ return {
99
+ secret: `keySecret_z${base58.encode(randomBytes(32))}`,
100
+ id: `key_z${base58.encode(randomBytes(12))}`,
101
+ };
141
102
  }
142
103
  function encrypt(value, keySecret, nOnceMaterial) {
143
- const keySecretBytes = base58.decode(
144
- keySecret.substring("keySecret_z".length)
145
- );
146
- const nOnce = blake3(
147
- textEncoder.encode(stableStringify(nOnceMaterial))
148
- ).slice(0, 24);
149
- const plaintext = textEncoder.encode(stableStringify(value));
150
- const ciphertext = xsalsa20(keySecretBytes, nOnce, plaintext);
151
- return `encrypted_U${base64url.encode(ciphertext)}`;
104
+ const keySecretBytes = base58.decode(keySecret.substring("keySecret_z".length));
105
+ const nOnce = blake3(textEncoder.encode(stableStringify(nOnceMaterial))).slice(0, 24);
106
+ const plaintext = textEncoder.encode(stableStringify(value));
107
+ const ciphertext = xsalsa20(keySecretBytes, nOnce, plaintext);
108
+ return `encrypted_U${base64url.encode(ciphertext)}`;
152
109
  }
153
110
  export function encryptForTransaction(value, keySecret, nOnceMaterial) {
154
- return encrypt(value, keySecret, nOnceMaterial);
111
+ return encrypt(value, keySecret, nOnceMaterial);
155
112
  }
156
113
  export function sealKeySecret(keys) {
157
- const nOnceMaterial = {
158
- sealed: keys.toSeal.id,
159
- sealing: keys.sealing.id
160
- };
161
- return {
162
- sealed: keys.toSeal.id,
163
- sealing: keys.sealing.id,
164
- encrypted: encrypt(
165
- keys.toSeal.secret,
166
- keys.sealing.secret,
167
- nOnceMaterial
168
- )
169
- };
114
+ const nOnceMaterial = {
115
+ sealed: keys.toSeal.id,
116
+ sealing: keys.sealing.id,
117
+ };
118
+ return {
119
+ sealed: keys.toSeal.id,
120
+ sealing: keys.sealing.id,
121
+ encrypted: encrypt(keys.toSeal.secret, keys.sealing.secret, nOnceMaterial),
122
+ };
170
123
  }
171
124
  function decrypt(encrypted, keySecret, nOnceMaterial) {
172
- const keySecretBytes = base58.decode(
173
- keySecret.substring("keySecret_z".length)
174
- );
175
- const nOnce = blake3(
176
- textEncoder.encode(stableStringify(nOnceMaterial))
177
- ).slice(0, 24);
178
- const ciphertext = base64url.decode(
179
- encrypted.substring("encrypted_U".length)
180
- );
181
- const plaintext = xsalsa20(keySecretBytes, nOnce, ciphertext);
182
- try {
183
- return JSON.parse(textDecoder.decode(plaintext));
184
- } catch (e) {
185
- return void 0;
186
- }
125
+ const keySecretBytes = base58.decode(keySecret.substring("keySecret_z".length));
126
+ const nOnce = blake3(textEncoder.encode(stableStringify(nOnceMaterial))).slice(0, 24);
127
+ const ciphertext = base64url.decode(encrypted.substring("encrypted_U".length));
128
+ const plaintext = xsalsa20(keySecretBytes, nOnce, ciphertext);
129
+ try {
130
+ return JSON.parse(textDecoder.decode(plaintext));
131
+ }
132
+ catch (e) {
133
+ return undefined;
134
+ }
187
135
  }
188
136
  export function decryptForTransaction(encrypted, keySecret, nOnceMaterial) {
189
- return decrypt(encrypted, keySecret, nOnceMaterial);
137
+ return decrypt(encrypted, keySecret, nOnceMaterial);
190
138
  }
191
139
  export function unsealKeySecret(sealedInfo, sealingSecret) {
192
- const nOnceMaterial = {
193
- sealed: sealedInfo.sealed,
194
- sealing: sealedInfo.sealing
195
- };
196
- return decrypt(sealedInfo.encrypted, sealingSecret, nOnceMaterial);
140
+ const nOnceMaterial = {
141
+ sealed: sealedInfo.sealed,
142
+ sealing: sealedInfo.sealing,
143
+ };
144
+ return decrypt(sealedInfo.encrypted, sealingSecret, nOnceMaterial);
197
145
  }
198
146
  export function uniquenessForHeader() {
199
- return `z${base58.encode(randomBytes(12))}`;
147
+ return `z${base58.encode(randomBytes(12))}`;
200
148
  }
201
149
  export function createdNowUnique() {
202
- const createdAt = (/* @__PURE__ */ new Date()).toISOString();
203
- return {
204
- createdAt,
205
- uniqueness: uniquenessForHeader()
206
- };
150
+ const createdAt = (new Date()).toISOString();
151
+ return {
152
+ createdAt,
153
+ uniqueness: uniquenessForHeader(),
154
+ };
207
155
  }
156
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -1,155 +1,115 @@
1
- "use strict";
2
- import {
3
- getRecipientID,
4
- getSignatoryID,
5
- secureHash,
6
- newRandomRecipient,
7
- newRandomSignatory,
8
- seal,
9
- sign,
10
- openAs,
11
- verify,
12
- shortHash,
13
- newRandomKeySecret,
14
- encryptForTransaction,
15
- decryptForTransaction,
16
- sealKeySecret,
17
- unsealKeySecret
18
- } from "./crypto";
1
+ import { getRecipientID, getSignatoryID, secureHash, newRandomRecipient, newRandomSignatory, seal, sign, openAs, verify, shortHash, newRandomKeySecret, encryptForTransaction, decryptForTransaction, sealKeySecret, unsealKeySecret, } from './crypto.js';
19
2
  import { base58, base64url } from "@scure/base";
20
3
  import { x25519 } from "@noble/curves/ed25519";
21
4
  import { xsalsa20_poly1305 } from "@noble/ciphers/salsa";
22
5
  import { blake3 } from "@noble/hashes/blake3";
23
6
  import stableStringify from "fast-json-stable-stringify";
24
7
  test("Signatures round-trip and use stable stringify", () => {
25
- const data = { b: "world", a: "hello" };
26
- const signatory = newRandomSignatory();
27
- const signature = sign(signatory, data);
28
- expect(signature).toMatch(/^signature_z/);
29
- expect(
30
- verify(signature, { a: "hello", b: "world" }, getSignatoryID(signatory))
31
- ).toBe(true);
8
+ const data = { b: "world", a: "hello" };
9
+ const signatory = newRandomSignatory();
10
+ const signature = sign(signatory, data);
11
+ expect(signature).toMatch(/^signature_z/);
12
+ expect(verify(signature, { a: "hello", b: "world" }, getSignatoryID(signatory))).toBe(true);
32
13
  });
33
14
  test("Invalid signatures don't verify", () => {
34
- const data = { b: "world", a: "hello" };
35
- const signatory = newRandomSignatory();
36
- const signatory2 = newRandomSignatory();
37
- const wrongSignature = sign(signatory2, data);
38
- expect(verify(wrongSignature, data, getSignatoryID(signatory))).toBe(false);
15
+ const data = { b: "world", a: "hello" };
16
+ const signatory = newRandomSignatory();
17
+ const signatory2 = newRandomSignatory();
18
+ const wrongSignature = sign(signatory2, data);
19
+ expect(verify(wrongSignature, data, getSignatoryID(signatory))).toBe(false);
39
20
  });
40
21
  test("Sealing round-trips, but invalid receiver can't unseal", () => {
41
- const data = { b: "world", a: "hello" };
42
- const sender = newRandomRecipient();
43
- const recipient1 = newRandomRecipient();
44
- const recipient2 = newRandomRecipient();
45
- const recipient3 = newRandomRecipient();
46
- const nOnceMaterial = {
47
- in: "co_zTEST",
48
- tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 0 }
49
- };
50
- const sealed = seal(
51
- data,
52
- sender,
53
- /* @__PURE__ */ new Set([getRecipientID(recipient1), getRecipientID(recipient2)]),
54
- nOnceMaterial
55
- );
56
- expect(sealed[getRecipientID(recipient1)]).toMatch(/^sealed_U/);
57
- expect(sealed[getRecipientID(recipient2)]).toMatch(/^sealed_U/);
58
- expect(
59
- openAs(sealed, recipient1, getRecipientID(sender), nOnceMaterial)
60
- ).toEqual(data);
61
- expect(
62
- openAs(sealed, recipient2, getRecipientID(sender), nOnceMaterial)
63
- ).toEqual(data);
64
- expect(
65
- openAs(sealed, recipient3, getRecipientID(sender), nOnceMaterial)
66
- ).toBeUndefined();
67
- const nOnce = blake3(
68
- new TextEncoder().encode(stableStringify(nOnceMaterial))
69
- ).slice(0, 24);
70
- const recipient3priv = base58.decode(
71
- recipient3.substring("recipientSecret_z".length)
72
- );
73
- const senderPub = base58.decode(
74
- getRecipientID(sender).substring("recipient_z".length)
75
- );
76
- const sealedBytes = base64url.decode(
77
- sealed[getRecipientID(recipient1)].substring("sealed_U".length)
78
- );
79
- const sharedSecret = x25519.getSharedSecret(recipient3priv, senderPub);
80
- expect(() => {
81
- const _ = xsalsa20_poly1305(sharedSecret, nOnce).decrypt(sealedBytes);
82
- }).toThrow("Wrong tag");
22
+ const data = { b: "world", a: "hello" };
23
+ const sender = newRandomRecipient();
24
+ const recipient1 = newRandomRecipient();
25
+ const recipient2 = newRandomRecipient();
26
+ const recipient3 = newRandomRecipient();
27
+ const nOnceMaterial = {
28
+ in: "co_zTEST",
29
+ tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 0 },
30
+ };
31
+ const sealed = seal(data, sender, new Set([getRecipientID(recipient1), getRecipientID(recipient2)]), nOnceMaterial);
32
+ expect(sealed[getRecipientID(recipient1)]).toMatch(/^sealed_U/);
33
+ expect(sealed[getRecipientID(recipient2)]).toMatch(/^sealed_U/);
34
+ expect(openAs(sealed, recipient1, getRecipientID(sender), nOnceMaterial)).toEqual(data);
35
+ expect(openAs(sealed, recipient2, getRecipientID(sender), nOnceMaterial)).toEqual(data);
36
+ expect(openAs(sealed, recipient3, getRecipientID(sender), nOnceMaterial)).toBeUndefined();
37
+ // trying with wrong recipient secret, by hand
38
+ const nOnce = blake3(new TextEncoder().encode(stableStringify(nOnceMaterial))).slice(0, 24);
39
+ const recipient3priv = base58.decode(recipient3.substring("recipientSecret_z".length));
40
+ const senderPub = base58.decode(getRecipientID(sender).substring("recipient_z".length));
41
+ const sealedBytes = base64url.decode(sealed[getRecipientID(recipient1)].substring("sealed_U".length));
42
+ const sharedSecret = x25519.getSharedSecret(recipient3priv, senderPub);
43
+ expect(() => {
44
+ const _ = xsalsa20_poly1305(sharedSecret, nOnce).decrypt(sealedBytes);
45
+ }).toThrow("Wrong tag");
83
46
  });
84
47
  test("Hashing is deterministic", () => {
85
- expect(secureHash({ b: "world", a: "hello" })).toEqual(
86
- secureHash({ a: "hello", b: "world" })
87
- );
88
- expect(shortHash({ b: "world", a: "hello" })).toEqual(
89
- shortHash({ a: "hello", b: "world" })
90
- );
48
+ expect(secureHash({ b: "world", a: "hello" })).toEqual(secureHash({ a: "hello", b: "world" }));
49
+ expect(shortHash({ b: "world", a: "hello" })).toEqual(shortHash({ a: "hello", b: "world" }));
91
50
  });
92
51
  test("Encryption for transactions round-trips", () => {
93
- const { secret } = newRandomKeySecret();
94
- const encrypted1 = encryptForTransaction({ a: "hello" }, secret, {
95
- in: "co_zTEST",
96
- tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 0 }
97
- });
98
- const encrypted2 = encryptForTransaction({ b: "world" }, secret, {
99
- in: "co_zTEST",
100
- tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 1 }
101
- });
102
- const decrypted1 = decryptForTransaction(encrypted1, secret, {
103
- in: "co_zTEST",
104
- tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 0 }
105
- });
106
- const decrypted2 = decryptForTransaction(encrypted2, secret, {
107
- in: "co_zTEST",
108
- tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 1 }
109
- });
110
- expect([decrypted1, decrypted2]).toEqual([{ a: "hello" }, { b: "world" }]);
52
+ const { secret } = newRandomKeySecret();
53
+ const encrypted1 = encryptForTransaction({ a: "hello" }, secret, {
54
+ in: "co_zTEST",
55
+ tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 0 },
56
+ });
57
+ const encrypted2 = encryptForTransaction({ b: "world" }, secret, {
58
+ in: "co_zTEST",
59
+ tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 1 },
60
+ });
61
+ const decrypted1 = decryptForTransaction(encrypted1, secret, {
62
+ in: "co_zTEST",
63
+ tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 0 },
64
+ });
65
+ const decrypted2 = decryptForTransaction(encrypted2, secret, {
66
+ in: "co_zTEST",
67
+ tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 1 },
68
+ });
69
+ expect([decrypted1, decrypted2]).toEqual([{ a: "hello" }, { b: "world" }]);
111
70
  });
112
71
  test("Encryption for transactions doesn't decrypt with a wrong key", () => {
113
- const { secret } = newRandomKeySecret();
114
- const { secret: secret2 } = newRandomKeySecret();
115
- const encrypted1 = encryptForTransaction({ a: "hello" }, secret, {
116
- in: "co_zTEST",
117
- tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 0 }
118
- });
119
- const encrypted2 = encryptForTransaction({ b: "world" }, secret, {
120
- in: "co_zTEST",
121
- tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 1 }
122
- });
123
- const decrypted1 = decryptForTransaction(encrypted1, secret2, {
124
- in: "co_zTEST",
125
- tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 0 }
126
- });
127
- const decrypted2 = decryptForTransaction(encrypted2, secret2, {
128
- in: "co_zTEST",
129
- tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 1 }
130
- });
131
- expect([decrypted1, decrypted2]).toEqual([void 0, void 0]);
72
+ const { secret } = newRandomKeySecret();
73
+ const { secret: secret2 } = newRandomKeySecret();
74
+ const encrypted1 = encryptForTransaction({ a: "hello" }, secret, {
75
+ in: "co_zTEST",
76
+ tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 0 },
77
+ });
78
+ const encrypted2 = encryptForTransaction({ b: "world" }, secret, {
79
+ in: "co_zTEST",
80
+ tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 1 },
81
+ });
82
+ const decrypted1 = decryptForTransaction(encrypted1, secret2, {
83
+ in: "co_zTEST",
84
+ tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 0 },
85
+ });
86
+ const decrypted2 = decryptForTransaction(encrypted2, secret2, {
87
+ in: "co_zTEST",
88
+ tx: { sessionID: "co_agent_zTEST_session_zTEST", txIndex: 1 },
89
+ });
90
+ expect([decrypted1, decrypted2]).toEqual([undefined, undefined]);
132
91
  });
133
92
  test("Encryption of keySecrets round-trips", () => {
134
- const toSeal = newRandomKeySecret();
135
- const sealing = newRandomKeySecret();
136
- const keys = {
137
- toSeal,
138
- sealing
139
- };
140
- const sealed = sealKeySecret(keys);
141
- const unsealed = unsealKeySecret(sealed, sealing.secret);
142
- expect(unsealed).toEqual(toSeal.secret);
93
+ const toSeal = newRandomKeySecret();
94
+ const sealing = newRandomKeySecret();
95
+ const keys = {
96
+ toSeal,
97
+ sealing,
98
+ };
99
+ const sealed = sealKeySecret(keys);
100
+ const unsealed = unsealKeySecret(sealed, sealing.secret);
101
+ expect(unsealed).toEqual(toSeal.secret);
143
102
  });
144
103
  test("Encryption of keySecrets doesn't unseal with a wrong key", () => {
145
- const toSeal = newRandomKeySecret();
146
- const sealing = newRandomKeySecret();
147
- const sealingWrong = newRandomKeySecret();
148
- const keys = {
149
- toSeal,
150
- sealing
151
- };
152
- const sealed = sealKeySecret(keys);
153
- const unsealed = unsealKeySecret(sealed, sealingWrong.secret);
154
- expect(unsealed).toBeUndefined();
104
+ const toSeal = newRandomKeySecret();
105
+ const sealing = newRandomKeySecret();
106
+ const sealingWrong = newRandomKeySecret();
107
+ const keys = {
108
+ toSeal,
109
+ sealing,
110
+ };
111
+ const sealed = sealKeySecret(keys);
112
+ const unsealed = unsealKeySecret(sealed, sealingWrong.secret);
113
+ expect(unsealed).toBeUndefined();
155
114
  });
115
+ //# sourceMappingURL=crypto.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.test.js","sourceRoot":"","sources":["../src/crypto.test.ts"],"names":[],"mappings":"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"}
package/dist/ids.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export type RawCoValueID = `co_z${string}` | `co_${string}_z${string}`;
2
+ export type TransactionID = {
3
+ sessionID: SessionID;
4
+ txIndex: number;
5
+ };
6
+ export type AgentID = `co_agent${string}_z${string}`;
7
+ export type SessionID = `${AgentID}_session_z${string}`;
package/dist/ids.js CHANGED
@@ -1 +1,2 @@
1
- "use strict";
1
+ export {};
2
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import { CoValue, agentCredentialFromBytes, agentCredentialToBytes, getAgent, getAgentID, newRandomAgentCredential, newRandomSessionID } from './coValue.js';
2
+ import { LocalNode } from './node.js';
3
+ import { CoMap } from './contentTypes/coMap.js';
4
+ import type { AgentCredential } from './coValue.js';
5
+ import type { AgentID, SessionID } from './ids.js';
6
+ import type { CoValueID, ContentType } from './contentType.js';
7
+ import type { JsonValue } from './jsonValue.js';
8
+ import type { SyncMessage } from './sync.js';
9
+ type Value = JsonValue | ContentType;
10
+ declare const internals: {
11
+ agentCredentialToBytes: typeof agentCredentialToBytes;
12
+ agentCredentialFromBytes: typeof agentCredentialFromBytes;
13
+ getAgent: typeof getAgent;
14
+ getAgentID: typeof getAgentID;
15
+ newRandomAgentCredential: typeof newRandomAgentCredential;
16
+ newRandomSessionID: typeof newRandomSessionID;
17
+ };
18
+ export { LocalNode, CoValue, CoMap, internals };
19
+ export type { Value, JsonValue, ContentType, CoValueID, AgentCredential, SessionID, AgentID, SyncMessage };