@towns-labs/encryption 2.0.1

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 (98) hide show
  1. package/README.md +3 -0
  2. package/dist/CryptoStoreInMemory.d.ts +42 -0
  3. package/dist/CryptoStoreInMemory.d.ts.map +1 -0
  4. package/dist/CryptoStoreInMemory.js +172 -0
  5. package/dist/CryptoStoreInMemory.js.map +1 -0
  6. package/dist/CryptoStoreIndexedDb.d.ts +55 -0
  7. package/dist/CryptoStoreIndexedDb.d.ts.map +1 -0
  8. package/dist/CryptoStoreIndexedDb.js +139 -0
  9. package/dist/CryptoStoreIndexedDb.js.map +1 -0
  10. package/dist/base.d.ts +69 -0
  11. package/dist/base.d.ts.map +1 -0
  12. package/dist/base.js +44 -0
  13. package/dist/base.js.map +1 -0
  14. package/dist/cryptoAesGcm.d.ts +9 -0
  15. package/dist/cryptoAesGcm.d.ts.map +1 -0
  16. package/dist/cryptoAesGcm.js +30 -0
  17. package/dist/cryptoAesGcm.js.map +1 -0
  18. package/dist/cryptoStore.d.ts +34 -0
  19. package/dist/cryptoStore.d.ts.map +1 -0
  20. package/dist/cryptoStore.js +17 -0
  21. package/dist/cryptoStore.js.map +1 -0
  22. package/dist/derivedEncryption.d.ts +2 -0
  23. package/dist/derivedEncryption.d.ts.map +1 -0
  24. package/dist/derivedEncryption.js +2 -0
  25. package/dist/derivedEncryption.js.map +1 -0
  26. package/dist/encryptionDelegate.d.ts +16 -0
  27. package/dist/encryptionDelegate.d.ts.map +1 -0
  28. package/dist/encryptionDelegate.js +64 -0
  29. package/dist/encryptionDelegate.js.map +1 -0
  30. package/dist/encryptionDevice.d.ts +264 -0
  31. package/dist/encryptionDevice.d.ts.map +1 -0
  32. package/dist/encryptionDevice.js +745 -0
  33. package/dist/encryptionDevice.js.map +1 -0
  34. package/dist/encryptionTypes.d.ts +21 -0
  35. package/dist/encryptionTypes.d.ts.map +1 -0
  36. package/dist/encryptionTypes.js +2 -0
  37. package/dist/encryptionTypes.js.map +1 -0
  38. package/dist/groupDecryption.d.ts +34 -0
  39. package/dist/groupDecryption.d.ts.map +1 -0
  40. package/dist/groupDecryption.js +84 -0
  41. package/dist/groupDecryption.js.map +1 -0
  42. package/dist/groupEncryption.d.ts +35 -0
  43. package/dist/groupEncryption.d.ts.map +1 -0
  44. package/dist/groupEncryption.js +99 -0
  45. package/dist/groupEncryption.js.map +1 -0
  46. package/dist/groupEncryptionCrypto.d.ts +125 -0
  47. package/dist/groupEncryptionCrypto.d.ts.map +1 -0
  48. package/dist/groupEncryptionCrypto.js +268 -0
  49. package/dist/groupEncryptionCrypto.js.map +1 -0
  50. package/dist/hybridGroupDecryption.d.ts +33 -0
  51. package/dist/hybridGroupDecryption.d.ts.map +1 -0
  52. package/dist/hybridGroupDecryption.js +84 -0
  53. package/dist/hybridGroupDecryption.js.map +1 -0
  54. package/dist/hybridGroupEncryption.d.ts +27 -0
  55. package/dist/hybridGroupEncryption.d.ts.map +1 -0
  56. package/dist/hybridGroupEncryption.js +101 -0
  57. package/dist/hybridGroupEncryption.js.map +1 -0
  58. package/dist/index.d.ts +20 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +20 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/olmLib.d.ts +35 -0
  63. package/dist/olmLib.d.ts.map +1 -0
  64. package/dist/olmLib.js +37 -0
  65. package/dist/olmLib.js.map +1 -0
  66. package/dist/storeTypes.d.ts +27 -0
  67. package/dist/storeTypes.d.ts.map +1 -0
  68. package/dist/storeTypes.js +2 -0
  69. package/dist/storeTypes.js.map +1 -0
  70. package/dist/tests/cryptoAesGcm.test.d.ts +2 -0
  71. package/dist/tests/cryptoAesGcm.test.d.ts.map +1 -0
  72. package/dist/tests/cryptoAesGcm.test.js +71 -0
  73. package/dist/tests/cryptoAesGcm.test.js.map +1 -0
  74. package/dist/tests/cryptoStore.test.d.ts +5 -0
  75. package/dist/tests/cryptoStore.test.d.ts.map +1 -0
  76. package/dist/tests/cryptoStore.test.js +114 -0
  77. package/dist/tests/cryptoStore.test.js.map +1 -0
  78. package/dist/tests/encryption-protocol.test.d.ts +2 -0
  79. package/dist/tests/encryption-protocol.test.d.ts.map +1 -0
  80. package/dist/tests/encryption-protocol.test.js +150 -0
  81. package/dist/tests/encryption-protocol.test.js.map +1 -0
  82. package/dist/tests/encryptionDelegate.test.d.ts +2 -0
  83. package/dist/tests/encryptionDelegate.test.d.ts.map +1 -0
  84. package/dist/tests/encryptionDelegate.test.js +78 -0
  85. package/dist/tests/encryptionDelegate.test.js.map +1 -0
  86. package/dist/tests/group-encryption-protocol.test.d.ts +2 -0
  87. package/dist/tests/group-encryption-protocol.test.d.ts.map +1 -0
  88. package/dist/tests/group-encryption-protocol.test.js +103 -0
  89. package/dist/tests/group-encryption-protocol.test.js.map +1 -0
  90. package/dist/tests/group-encryptionDelegate.test.d.ts +2 -0
  91. package/dist/tests/group-encryptionDelegate.test.d.ts.map +1 -0
  92. package/dist/tests/group-encryptionDelegate.test.js +23 -0
  93. package/dist/tests/group-encryptionDelegate.test.js.map +1 -0
  94. package/dist/tests/pk.test.d.ts +2 -0
  95. package/dist/tests/pk.test.d.ts.map +1 -0
  96. package/dist/tests/pk.test.js +103 -0
  97. package/dist/tests/pk.test.js.map +1 -0
  98. package/package.json +51 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryptionDevice.js","sourceRoot":"","sources":["../src/encryptionDevice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { Account as OlmAccount, InboundGroupSession as OlmInboundGroupSession, OutboundGroupSession as OlmOutboundGroupSession, PkDecryption as OlmPkDecryption, PkEncryption as OlmPkEncryption, PkSigning as OlmPkSigning, Session as OlmSession, Utility as OlmUtility } from '@towns-protocol/olm';
2
+ import { EncryptedData } from '@towns-labs/proto';
3
+ export type Account = OlmAccount;
4
+ export type PkDecryption = OlmPkDecryption;
5
+ export type PkEncryption = OlmPkEncryption;
6
+ export type PkSigning = OlmPkSigning;
7
+ export type Session = OlmSession;
8
+ export type Utility = OlmUtility;
9
+ export type OutboundGroupSession = OlmOutboundGroupSession;
10
+ export type InboundGroupSession = OlmInboundGroupSession;
11
+ export interface IOutboundGroupSessionKey {
12
+ sessionId: string;
13
+ chain_index: number;
14
+ key: string;
15
+ }
16
+ export interface DecryptedContentError {
17
+ missingSession: boolean;
18
+ encryptedData: EncryptedData;
19
+ error?: unknown;
20
+ }
21
+ //# sourceMappingURL=encryptionTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryptionTypes.d.ts","sourceRoot":"","sources":["../src/encryptionTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,OAAO,IAAI,UAAU,EACrB,mBAAmB,IAAI,sBAAsB,EAC7C,oBAAoB,IAAI,uBAAuB,EAC/C,YAAY,IAAI,eAAe,EAC/B,YAAY,IAAI,eAAe,EAC/B,SAAS,IAAI,YAAY,EACzB,OAAO,IAAI,UAAU,EACrB,OAAO,IAAI,UAAU,EACxB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,MAAM,MAAM,OAAO,GAAG,UAAU,CAAA;AAChC,MAAM,MAAM,YAAY,GAAG,eAAe,CAAA;AAC1C,MAAM,MAAM,YAAY,GAAG,eAAe,CAAA;AAC1C,MAAM,MAAM,SAAS,GAAG,YAAY,CAAA;AACpC,MAAM,MAAM,OAAO,GAAG,UAAU,CAAA;AAChC,MAAM,MAAM,OAAO,GAAG,UAAU,CAAA;AAChC,MAAM,MAAM,oBAAoB,GAAG,uBAAuB,CAAA;AAC1D,MAAM,MAAM,mBAAmB,GAAG,sBAAsB,CAAA;AAExD,MAAM,WAAW,wBAAwB;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,qBAAqB;IAClC,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,aAAa,CAAA;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAA;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=encryptionTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryptionTypes.js","sourceRoot":"","sources":["../src/encryptionTypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import { DecryptionAlgorithm, IDecryptionParams } from './base';
2
+ import { GroupEncryptionAlgorithmId, GroupEncryptionSession } from './olmLib';
3
+ import { EncryptedData } from '@towns-labs/proto';
4
+ /**
5
+ * Group decryption implementation
6
+ *
7
+ * @param params - parameters, as per {@link DecryptionAlgorithm}
8
+ */
9
+ export declare class GroupDecryption extends DecryptionAlgorithm {
10
+ readonly algorithm = GroupEncryptionAlgorithmId.GroupEncryption;
11
+ private lruCache;
12
+ constructor(params: IDecryptionParams);
13
+ /**
14
+ * returns a promise which resolves to a
15
+ * {@link EventDecryptionResult} once we have finished
16
+ * decrypting, or rejects with an `algorithms.DecryptionError` if there is a
17
+ * problem decrypting the event.
18
+ */
19
+ decrypt(streamId: string, content: EncryptedData): Promise<Uint8Array | string>;
20
+ /**
21
+ * @param streamId - the stream id of the session
22
+ * @param session- the group session object
23
+ */
24
+ importStreamKey(streamId: string, session: GroupEncryptionSession): Promise<void>;
25
+ /** */
26
+ exportGroupSession(streamId: string, sessionId: string): Promise<GroupEncryptionSession | undefined>;
27
+ /** */
28
+ exportGroupSessions(): Promise<GroupEncryptionSession[]>;
29
+ /** */
30
+ exportGroupSessionIds(streamId: string): Promise<string[]>;
31
+ /** */
32
+ hasSessionKey(streamId: string, sessionId: string): Promise<boolean>;
33
+ }
34
+ //# sourceMappingURL=groupDecryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupDecryption.d.ts","sourceRoot":"","sources":["../src/groupDecryption.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAmB,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAChF,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAwB,MAAM,mBAAmB,CAAA;AAOvE;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,mBAAmB;IACpD,SAAgB,SAAS,8CAA6C;IACtE,OAAO,CAAC,QAAQ,CAAuC;gBACpC,MAAM,EAAE,iBAAiB;IAK5C;;;;;OAKG;IACU,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC;IAmC5F;;;OAGG;IACU,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB9F,MAAM;IACO,kBAAkB,CAC3B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAI9C,MAAM;IACC,mBAAmB,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAI/D,MAAM;IACC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIjE,MAAM;IACO,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAGpF"}
@@ -0,0 +1,84 @@
1
+ import { DecryptionAlgorithm, DecryptionError } from './base';
2
+ import { GroupEncryptionAlgorithmId } from './olmLib';
3
+ import { EncryptedDataVersion } from '@towns-labs/proto';
4
+ import { bin_fromBase64, dlogError } from '@towns-labs/utils';
5
+ import { LRUCache } from 'lru-cache';
6
+ const logError = dlogError('csb:encryption:groupDecryption');
7
+ /**
8
+ * Group decryption implementation
9
+ *
10
+ * @param params - parameters, as per {@link DecryptionAlgorithm}
11
+ */
12
+ export class GroupDecryption extends DecryptionAlgorithm {
13
+ algorithm = GroupEncryptionAlgorithmId.GroupEncryption;
14
+ lruCache;
15
+ constructor(params) {
16
+ super(params);
17
+ this.lruCache = new LRUCache({ max: 1000 });
18
+ }
19
+ /**
20
+ * returns a promise which resolves to a
21
+ * {@link EventDecryptionResult} once we have finished
22
+ * decrypting, or rejects with an `algorithms.DecryptionError` if there is a
23
+ * problem decrypting the event.
24
+ */
25
+ async decrypt(streamId, content) {
26
+ if (!content.senderKey || !content.sessionId || !content.ciphertext) {
27
+ throw new DecryptionError('GROUP_DECRYPTION_MISSING_FIELDS', 'Missing fields in input');
28
+ }
29
+ let session = this.lruCache.get(content.sessionId);
30
+ if (!session) {
31
+ const { session: loadedSession } = await this.device.getInboundGroupSession(streamId, content.sessionId);
32
+ if (loadedSession) {
33
+ this.lruCache.set(content.sessionId, loadedSession);
34
+ session = loadedSession;
35
+ }
36
+ }
37
+ if (!session) {
38
+ throw new Error('Session not found');
39
+ }
40
+ // for historical reasons, we return the plaintext as a string
41
+ const result = session.decrypt(content.ciphertext);
42
+ switch (content.version) {
43
+ case EncryptedDataVersion.ENCRYPTED_DATA_VERSION_0:
44
+ return result.plaintext;
45
+ case EncryptedDataVersion.ENCRYPTED_DATA_VERSION_1:
46
+ return bin_fromBase64(result.plaintext);
47
+ default:
48
+ throw new DecryptionError('GROUP_DECRYPTION_INVALID_VERSION', 'Unsupported version');
49
+ }
50
+ }
51
+ /**
52
+ * @param streamId - the stream id of the session
53
+ * @param session- the group session object
54
+ */
55
+ async importStreamKey(streamId, session) {
56
+ const extraSessionData = {};
57
+ try {
58
+ await this.device.addInboundGroupSession(streamId, session.sessionId, session.sessionKey,
59
+ // sender claimed keys not yet supported
60
+ {}, false, extraSessionData);
61
+ }
62
+ catch (e) {
63
+ logError(`Error handling room key import: ${e.message}`);
64
+ throw e;
65
+ }
66
+ }
67
+ /** */
68
+ async exportGroupSession(streamId, sessionId) {
69
+ return this.device.exportInboundGroupSession(streamId, sessionId);
70
+ }
71
+ /** */
72
+ exportGroupSessions() {
73
+ return this.device.exportInboundGroupSessions();
74
+ }
75
+ /** */
76
+ exportGroupSessionIds(streamId) {
77
+ return this.device.getInboundGroupSessionIds(streamId);
78
+ }
79
+ /** */
80
+ async hasSessionKey(streamId, sessionId) {
81
+ return this.device.hasInboundSessionKeys(streamId, sessionId);
82
+ }
83
+ }
84
+ //# sourceMappingURL=groupDecryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupDecryption.js","sourceRoot":"","sources":["../src/groupDecryption.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { EncryptedData } from '@towns-labs/proto';
2
+ import { EncryptionAlgorithm, EnsureOutboundSessionOpts, IEncryptionParams } from './base';
3
+ import { GroupEncryptionAlgorithmId } from './olmLib';
4
+ /** Note Jterzis 07/26/23: Several features are intentionally left out of this module,
5
+ * that we may want to implement in the future:
6
+ * 1. Shared History - We don't have a concept of "shared history visibility settings" in River.
7
+ * 2. Backup Manager - We do not backup session keys to anything other than client-side storage.
8
+ * 3. Blocking Devices - We do not block devices and therefore do not account for blocked devices here.
9
+ * 4. Key Forwarding - River does not support key forwarding sessions created by another user's device.
10
+ * 5. Cross Signing - River does not support cross signing yet. Each device is verified individually at this time.
11
+ * 6. Sessions Rotation - River does not support active or periodic session rotation yet.
12
+ */
13
+ /**
14
+ * Group encryption implementation
15
+ *
16
+ * @param params - parameters, as per {@link EncryptionAlgorithm}
17
+ */
18
+ export declare class GroupEncryption extends EncryptionAlgorithm {
19
+ readonly algorithm = GroupEncryptionAlgorithmId.GroupEncryption;
20
+ constructor(params: IEncryptionParams);
21
+ ensureOutboundSession(streamId: string, opts?: EnsureOutboundSessionOpts): Promise<string>;
22
+ hasOutboundSession(streamId: string): Promise<boolean>;
23
+ private shareSession;
24
+ /**
25
+ * @deprecated
26
+ */
27
+ encrypt_deprecated_v0(streamId: string, payload: string): Promise<EncryptedData>;
28
+ /**
29
+ * @param content - plaintext event content
30
+ *
31
+ * @returns Promise which resolves to the new event body
32
+ */
33
+ encrypt(streamId: string, payload: Uint8Array): Promise<EncryptedData>;
34
+ }
35
+ //# sourceMappingURL=groupEncryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupEncryption.d.ts","sourceRoot":"","sources":["../src/groupEncryption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA6C,MAAM,mBAAmB,CAAA;AAC5F,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAC1F,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAA;AAMrD;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,mBAAmB;IACpD,SAAgB,SAAS,8CAA6C;gBACnD,MAAM,EAAE,iBAAiB;IAI/B,qBAAqB,CAC9B,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,yBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC;IA2BL,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YASrD,YAAY;IAiB1B;;OAEG;IACU,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAY7F;;;;OAIG;IACU,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;CAYtF"}
@@ -0,0 +1,99 @@
1
+ import { EncryptedDataSchema, EncryptedDataVersion } from '@towns-labs/proto';
2
+ import { EncryptionAlgorithm } from './base';
3
+ import { GroupEncryptionAlgorithmId } from './olmLib';
4
+ import { bin_toBase64, dlog } from '@towns-labs/utils';
5
+ import { create } from '@bufbuild/protobuf';
6
+ const log = dlog('csb:encryption:groupEncryption');
7
+ /** Note Jterzis 07/26/23: Several features are intentionally left out of this module,
8
+ * that we may want to implement in the future:
9
+ * 1. Shared History - We don't have a concept of "shared history visibility settings" in River.
10
+ * 2. Backup Manager - We do not backup session keys to anything other than client-side storage.
11
+ * 3. Blocking Devices - We do not block devices and therefore do not account for blocked devices here.
12
+ * 4. Key Forwarding - River does not support key forwarding sessions created by another user's device.
13
+ * 5. Cross Signing - River does not support cross signing yet. Each device is verified individually at this time.
14
+ * 6. Sessions Rotation - River does not support active or periodic session rotation yet.
15
+ */
16
+ /**
17
+ * Group encryption implementation
18
+ *
19
+ * @param params - parameters, as per {@link EncryptionAlgorithm}
20
+ */
21
+ export class GroupEncryption extends EncryptionAlgorithm {
22
+ algorithm = GroupEncryptionAlgorithmId.GroupEncryption;
23
+ constructor(params) {
24
+ super(params);
25
+ }
26
+ async ensureOutboundSession(streamId, opts) {
27
+ try {
28
+ const sessionKey = await this.device.getOutboundGroupSessionKey(streamId);
29
+ return sessionKey.sessionId;
30
+ }
31
+ catch (error) {
32
+ // if we don't have a cached session at this point, create a new one
33
+ const sessionId = await this.device.createOutboundGroupSession(streamId);
34
+ log(`Started new megolm session ${sessionId}`);
35
+ // don't wait for the session to be shared
36
+ const promise = this.shareSession(streamId, sessionId, opts?.priorityUserIds ?? []);
37
+ if (opts?.shareShareSessionTimeoutMs === 0) {
38
+ await promise;
39
+ }
40
+ else {
41
+ // await the promise but timeout after N seconds
42
+ const waitTimeBeforeMovingOn = opts?.shareShareSessionTimeoutMs ?? 30000;
43
+ await Promise.race([
44
+ promise,
45
+ new Promise((resolve, _) => setTimeout(() => resolve(), waitTimeBeforeMovingOn)),
46
+ ]);
47
+ }
48
+ return sessionId;
49
+ }
50
+ }
51
+ async hasOutboundSession(streamId) {
52
+ try {
53
+ await this.device.getOutboundGroupSessionKey(streamId);
54
+ return true;
55
+ }
56
+ catch {
57
+ return false;
58
+ }
59
+ }
60
+ async shareSession(streamId, sessionId, priorityUserIds) {
61
+ const session = await this.device.exportInboundGroupSession(streamId, sessionId);
62
+ if (!session) {
63
+ throw new Error('Session key not found for session ' + sessionId);
64
+ }
65
+ await this.client.encryptAndShareGroupSessionsToStream(streamId, [session], this.algorithm, priorityUserIds);
66
+ }
67
+ /**
68
+ * @deprecated
69
+ */
70
+ async encrypt_deprecated_v0(streamId, payload) {
71
+ await this.ensureOutboundSession(streamId);
72
+ const result = await this.device.encryptGroupMessage(payload, streamId);
73
+ return create(EncryptedDataSchema, {
74
+ algorithm: this.algorithm,
75
+ senderKey: this.device.deviceCurve25519Key,
76
+ ciphertext: result.ciphertext,
77
+ sessionId: result.sessionId,
78
+ version: EncryptedDataVersion.ENCRYPTED_DATA_VERSION_0,
79
+ });
80
+ }
81
+ /**
82
+ * @param content - plaintext event content
83
+ *
84
+ * @returns Promise which resolves to the new event body
85
+ */
86
+ async encrypt(streamId, payload) {
87
+ log('Starting to encrypt event');
88
+ await this.ensureOutboundSession(streamId);
89
+ const result = await this.device.encryptGroupMessage(bin_toBase64(payload), streamId);
90
+ return create(EncryptedDataSchema, {
91
+ algorithm: this.algorithm,
92
+ senderKey: this.device.deviceCurve25519Key,
93
+ ciphertext: result.ciphertext,
94
+ sessionId: result.sessionId,
95
+ version: EncryptedDataVersion.ENCRYPTED_DATA_VERSION_1,
96
+ });
97
+ }
98
+ }
99
+ //# sourceMappingURL=groupEncryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupEncryption.js","sourceRoot":"","sources":["../src/groupEncryption.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ import { EncryptedData, ExportedDevice } from '@towns-labs/proto';
2
+ import { GroupEncryptionAlgorithmId, GroupEncryptionSession, UserDevice } from './olmLib';
3
+ import { DecryptionAlgorithm, EncryptionAlgorithm, EnsureOutboundSessionOpts, IGroupEncryptionClient } from './base';
4
+ import { type EncryptionDeviceInitOpts } from './encryptionDevice';
5
+ import type { CryptoStore } from './cryptoStore';
6
+ export interface ImportRoomKeysOpts {
7
+ /** Reports ongoing progress of the import process. Can be used for feedback. */
8
+ progressCallback?: (stage: ImportRoomKeyProgressData) => void;
9
+ }
10
+ /**
11
+ * Room key import progress report.
12
+ * Used when calling {@link GroupEncryptionCrypto#importRoomKeys} or
13
+ * {@link GroupEncryptionCrypto#importRoomKeysAsJson} as the parameter of
14
+ * the progressCallback. Used to display feedback.
15
+ */
16
+ export interface ImportRoomKeyProgressData {
17
+ stage: string;
18
+ successes?: number;
19
+ failures?: number;
20
+ total?: number;
21
+ }
22
+ export declare class GroupEncryptionCrypto {
23
+ private delegate;
24
+ private readonly encryptionDevice;
25
+ readonly groupEncryption: Record<GroupEncryptionAlgorithmId, EncryptionAlgorithm>;
26
+ readonly groupDecryption: Record<GroupEncryptionAlgorithmId, DecryptionAlgorithm>;
27
+ readonly cryptoStore: CryptoStore;
28
+ globalBlacklistUnverifiedDevices: boolean;
29
+ globalErrorOnUnknownDevices: boolean;
30
+ constructor(client: IGroupEncryptionClient, cryptoStore: CryptoStore);
31
+ /** Iniitalize crypto module prior to usage
32
+ *
33
+ */
34
+ init(opts?: EncryptionDeviceInitOpts): Promise<void>;
35
+ /**
36
+ * Encrypt an event using the device keys
37
+ *
38
+ * @param payload - string to be encrypted
39
+ * @param deviceKeys - recipients to encrypt message for
40
+ *
41
+ * @returns Promise which resolves when the event has been
42
+ * encrypted, or null if nothing was needed
43
+ */
44
+ encryptWithDeviceKeys(payload: string, deviceKeys: UserDevice[]): Promise<Record<string, string>>;
45
+ /**
46
+ * Decrypt a received event using the device key
47
+ *
48
+ * @returns a promise which resolves once we have finished decrypting.
49
+ * Rejects with an error if there is a problem decrypting the event.
50
+ */
51
+ decryptWithDeviceKey(ciphertext: string, senderDeviceKey: string): Promise<string>;
52
+ /**
53
+ * Ensure that we have an outbound group session key for the given stream
54
+ *
55
+ * @returns Promise which resolves when the event has been
56
+ * created, use options to await the initial share
57
+ */
58
+ ensureOutboundSession(streamId: string, algorithm: GroupEncryptionAlgorithmId, opts?: EnsureOutboundSessionOpts): Promise<string>;
59
+ /**
60
+ *
61
+ * @param streamId - the id of the stream to check
62
+ * @param algorithm - the algorithm to use
63
+ * @returns true if the stream has an outbound session, false otherwise
64
+ */
65
+ hasOutboundSession(streamId: string, algorithm: GroupEncryptionAlgorithmId): Promise<boolean>;
66
+ /**
67
+ * Encrypt an event using group encryption algorithm
68
+ *
69
+ * @returns Promise which resolves when the event has been
70
+ * encrypted, or null if nothing was needed
71
+ */
72
+ encryptGroupEvent(streamId: string, payload: Uint8Array, algorithm: GroupEncryptionAlgorithmId): Promise<EncryptedData>;
73
+ /**
74
+ * Deprecated uses v0 encryption version
75
+ *
76
+ * @returns Promise which resolves when the event has been
77
+ * encrypted, or null if nothing was needed
78
+ */
79
+ encryptGroupEvent_deprecated_v0(streamId: string, payload: string, algorithm: GroupEncryptionAlgorithmId): Promise<EncryptedData>;
80
+ /**
81
+ * Decrypt a received event using group encryption algorithm
82
+ *
83
+ * @returns a promise which resolves once we have finished decrypting.
84
+ * Rejects with an error if there is a problem decrypting the event.
85
+ */
86
+ decryptGroupEvent(streamId: string, content: EncryptedData): Promise<string | Uint8Array<ArrayBufferLike>>;
87
+ exportGroupSession(streamId: string, sessionId: string): Promise<GroupEncryptionSession | undefined>;
88
+ /** */
89
+ exportRoomKeys(): Promise<GroupEncryptionSession[]>;
90
+ /** */
91
+ getGroupSessionIds(streamId: string): Promise<string[]>;
92
+ /** */
93
+ hasSessionKey(streamId: string, sessionId: string, algorithm: GroupEncryptionAlgorithmId): Promise<boolean>;
94
+ /** */
95
+ getUserDevice(): UserDevice;
96
+ /** */
97
+ exportDevice(): Promise<ExportedDevice>;
98
+ /**
99
+ * Import a list of group session keys previously exported by exportRoomKeys
100
+ *
101
+ * @param streamId - the id of the stream the keys are for
102
+ * @param keys - a list of session export objects
103
+ * @returns a promise which resolves once the keys have been imported
104
+ */
105
+ importSessionKeys(streamId: string, keys: GroupEncryptionSession[]): Promise<void>;
106
+ /**
107
+ * Import a list of room keys previously exported by exportRoomKeys
108
+ *
109
+ * @param keys - a list of session export objects
110
+ * @returns a promise which resolves once the keys have been imported
111
+ */
112
+ importRoomKeys(keys: GroupEncryptionSession[], opts?: ImportRoomKeysOpts): Promise<void>;
113
+ /**
114
+ * Import a JSON string encoding a list of room keys previously
115
+ * exported by exportRoomKeysAsJson
116
+ *
117
+ * @param keys - a JSON string encoding a list of session export
118
+ * objects, each of which is an GroupEncryptionSession
119
+ * @param opts - options object
120
+ * @returns a promise which resolves once the keys have been imported
121
+ */
122
+ importRoomKeysAsJson(keys: string): Promise<void>;
123
+ hasHybridSession(streamId: string): Promise<boolean>;
124
+ }
125
+ //# sourceMappingURL=groupEncryptionCrypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupEncryptionCrypto.d.ts","sourceRoot":"","sources":["../src/groupEncryptionCrypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,EACH,0BAA0B,EAC1B,sBAAsB,EAEtB,UAAU,EACb,MAAM,UAAU,CAAA;AAEjB,OAAO,EACH,mBAAmB,EAEnB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACzB,MAAM,QAAQ,CAAA;AAGf,OAAO,EAAoB,KAAK,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAKpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAIhD,MAAM,WAAW,kBAAkB;IAC/B,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAA;CAChE;AAED;;;;;GAKG;AACH,MAAM,WAAW,yBAAyB;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,qBAAqB;IAC9B,OAAO,CAAC,QAAQ,CAAgC;IAEhD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IACnD,SAAgB,eAAe,EAAE,MAAM,CAAC,0BAA0B,EAAE,mBAAmB,CAAC,CAAA;IACxF,SAAgB,eAAe,EAAE,MAAM,CAAC,0BAA0B,EAAE,mBAAmB,CAAC,CAAA;IACxF,SAAgB,WAAW,EAAE,WAAW,CAAA;IACjC,gCAAgC,UAAQ;IACxC,2BAA2B,UAAO;gBAEtB,MAAM,EAAE,sBAAsB,EAAE,WAAW,EAAE,WAAW;IA+B3E;;OAEG;IACU,IAAI,CAAC,IAAI,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE;;;;;;;;OAQG;IACU,qBAAqB,CAC9B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,EAAE,GACzB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAgBlC;;;;;OAKG;IACU,oBAAoB,CAC7B,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC;IAIlB;;;;;OAKG;IACU,qBAAqB,CAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,0BAA0B,EACrC,IAAI,CAAC,EAAE,yBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC;IAIlB;;;;;OAKG;IACU,kBAAkB,CAC3B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,0BAA0B,GACtC,OAAO,CAAC,OAAO,CAAC;IAGnB;;;;;OAKG;IACU,iBAAiB,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,0BAA0B,GACtC,OAAO,CAAC,aAAa,CAAC;IAGzB;;;;;OAKG;IACU,+BAA+B,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,0BAA0B,GACtC,OAAO,CAAC,aAAa,CAAC;IAGzB;;;;;OAKG;IACU,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAS1D,kBAAkB,CAC3B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAa9C,MAAM;IACO,cAAc,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAShE,MAAM;IACO,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IASpE,MAAM;IACO,aAAa,CACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,0BAA0B,GACtC,OAAO,CAAC,OAAO,CAAC;IAInB,MAAM;IACC,aAAa,IAAI,UAAU;IAOlC,MAAM;IACO,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC;IAIpD;;;;;;OAMG;IACU,iBAAiB,CAC1B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,sBAAsB,EAAE,GAC/B,OAAO,CAAC,IAAI,CAAC;IAmBhB;;;;;OAKG;IACI,cAAc,CACjB,IAAI,EAAE,sBAAsB,EAAE,EAC9B,IAAI,GAAE,kBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC;IA+ChB;;;;;;;;OAQG;IACU,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAGpE"}