@wireapp/core 17.17.2 → 17.18.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.
- package/CHANGELOG.md +35 -0
- package/package.json +3 -3
- package/src/main/client/ClientDatabaseRepository.js +3 -3
- package/src/main/client/ClientDatabaseRepository.js.map +1 -1
- package/src/main/client/ClientDatabaseRepository.ts +3 -3
- package/src/main/cryptography/CryptographyService.d.ts +2 -2
- package/src/main/cryptography/CryptographyService.js +14 -9
- package/src/main/cryptography/CryptographyService.js.map +1 -1
- package/src/main/cryptography/CryptographyService.test.browser.js +0 -11
- package/src/main/cryptography/CryptographyService.test.node.js +25 -8
- package/src/main/cryptography/CryptographyService.test.node.js.map +1 -1
- package/src/main/cryptography/CryptographyService.test.node.ts +28 -8
- package/src/main/cryptography/CryptographyService.ts +19 -9
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,41 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [17.18.1](https://github.com/wireapp/wire-web-packages/tree/main/packages/core/compare/@wireapp/core@17.18.0...@wireapp/core@17.18.1) (2021-10-14)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @wireapp/core
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [17.18.0](https://github.com/wireapp/wire-web-packages/tree/main/packages/core/compare/@wireapp/core@17.17.4...@wireapp/core@17.18.0) (2021-10-13)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* **core:** Add domain to encrypted session ids ([#4154](https://github.com/wireapp/wire-web-packages/tree/main/packages/core/issues/4154)) ([ca00b8a](https://github.com/wireapp/wire-web-packages/tree/main/packages/core/commit/ca00b8a11552be9f7b5a14fb62df7de8818e03e3))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
## [17.17.4](https://github.com/wireapp/wire-web-packages/tree/main/packages/core/compare/@wireapp/core@17.17.3...@wireapp/core@17.17.4) (2021-10-12)
|
|
26
|
+
|
|
27
|
+
**Note:** Version bump only for package @wireapp/core
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
## [17.17.3](https://github.com/wireapp/wire-web-packages/tree/main/packages/core/compare/@wireapp/core@17.17.2...@wireapp/core@17.17.3) (2021-10-12)
|
|
34
|
+
|
|
35
|
+
**Note:** Version bump only for package @wireapp/core
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
6
41
|
## [17.17.2](https://github.com/wireapp/wire-web-packages/tree/main/packages/core/compare/@wireapp/core@17.17.1...@wireapp/core@17.17.2) (2021-10-11)
|
|
7
42
|
|
|
8
43
|
**Note:** Version bump only for package @wireapp/core
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@types/long": "4.0.1",
|
|
7
7
|
"@types/node": "~14",
|
|
8
|
-
"@wireapp/api-client": "
|
|
8
|
+
"@wireapp/api-client": "15.1.0",
|
|
9
9
|
"@wireapp/cryptobox": "12.7.1",
|
|
10
10
|
"bazinga64": "5.9.7",
|
|
11
11
|
"hash.js": "1.1.7",
|
|
@@ -69,6 +69,6 @@
|
|
|
69
69
|
"test:project": "yarn dist && yarn test",
|
|
70
70
|
"test:node": "nyc jasmine --config=jasmine.json"
|
|
71
71
|
},
|
|
72
|
-
"version": "17.
|
|
73
|
-
"gitHead": "
|
|
72
|
+
"version": "17.18.1",
|
|
73
|
+
"gitHead": "13b3722c840498a4d0684ffd3b3e12cf10284971"
|
|
74
74
|
}
|
|
@@ -59,16 +59,16 @@ class ClientDatabaseRepository {
|
|
|
59
59
|
}
|
|
60
60
|
async updateClient(userId, client, domain) {
|
|
61
61
|
const transformedClient = this.transformClient(userId, client, false, domain);
|
|
62
|
-
await this.storeEngine.update(ClientDatabaseRepository.STORES.CLIENTS, cryptography_1.CryptographyService.constructSessionId(userId, client.id), transformedClient);
|
|
62
|
+
await this.storeEngine.update(ClientDatabaseRepository.STORES.CLIENTS, cryptography_1.CryptographyService.constructSessionId(userId, client.id, domain), transformedClient);
|
|
63
63
|
return transformedClient;
|
|
64
64
|
}
|
|
65
65
|
async createClient(userId, client, domain) {
|
|
66
66
|
const transformedClient = this.transformClient(userId, client, false, domain);
|
|
67
|
-
await this.storeEngine.create(ClientDatabaseRepository.STORES.CLIENTS, cryptography_1.CryptographyService.constructSessionId(userId, client.id), transformedClient);
|
|
67
|
+
await this.storeEngine.create(ClientDatabaseRepository.STORES.CLIENTS, cryptography_1.CryptographyService.constructSessionId(userId, client.id, domain), transformedClient);
|
|
68
68
|
return transformedClient;
|
|
69
69
|
}
|
|
70
70
|
transformClient(userId, client, verified, domain) {
|
|
71
|
-
return Object.assign(Object.assign({}, client), { domain, meta: { is_verified: verified, primary_key: cryptography_1.CryptographyService.constructSessionId(userId, client.id) } });
|
|
71
|
+
return Object.assign(Object.assign({}, client), { domain, meta: { is_verified: verified, primary_key: cryptography_1.CryptographyService.constructSessionId(userId, client.id, domain) } });
|
|
72
72
|
}
|
|
73
73
|
transformLocalClient(client, domain) {
|
|
74
74
|
return Object.assign(Object.assign({}, client), { domain, meta: { is_verified: true, primary_key: ClientDatabaseRepository.KEYS.LOCAL_IDENTITY } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientDatabaseRepository.js","sourceRoot":"","sources":["ClientDatabaseRepository.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;AAKH,mDAAqD;AAGrD,IAAY,cAEX;AAFD,WAAY,cAAc;IACxB,qCAAmB,CAAA;AACrB,CAAC,EAFW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAEzB;AAED,MAAa,wBAAwB;IAOnC,YAA6B,WAAuB;QAAvB,gBAAW,GAAX,WAAW,CAAY;IAAG,CAAC;IAEjD,cAAc;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACtE,CAAC;IAEM,SAAS,CAAC,SAAiB;QAChC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAa,wBAAwB,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC/F,CAAC;IAEM,iBAAiB;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAC5B,wBAAwB,CAAC,MAAM,CAAC,OAAO,EACvC,wBAAwB,CAAC,IAAI,CAAC,cAAc,CAC7C,CAAC;IACJ,CAAC;IAEM,YAAY,CAAC,SAAiB;QACnC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,wBAAwB,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACrF,CAAC;IAEM,gBAAgB,CACrB,MAAc,EACd,UAA8B,EAC9B,MAAqB;QAErB,MAAM,iBAAiB,GAA0B,EAAE,CAAC;QACpD,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE;YAC/B,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SACnE;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACxC,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,MAAwB,EAAE,MAAqB;QAC5E,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAC3B,wBAAwB,CAAC,MAAM,CAAC,OAAO,EACvC,wBAAwB,CAAC,IAAI,CAAC,cAAc,EAC5C,iBAAiB,CAClB,CAAC;QACF,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,MAAwB,EAAE,MAAqB;QAC5E,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAC3B,wBAAwB,CAAC,MAAM,CAAC,OAAO,EACvC,wBAAwB,CAAC,IAAI,CAAC,cAAc,EAC5C,iBAAiB,CAClB,CAAC;QACF,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,MAAwB,EAAE,MAAqB;QACvF,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC9E,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAC3B,wBAAwB,CAAC,MAAM,CAAC,OAAO,EACvC,kCAAmB,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"ClientDatabaseRepository.js","sourceRoot":"","sources":["ClientDatabaseRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -91,7 +91,7 @@ export class ClientDatabaseRepository {
|
|
|
91
91
|
const transformedClient = this.transformClient(userId, client, false, domain);
|
|
92
92
|
await this.storeEngine.update(
|
|
93
93
|
ClientDatabaseRepository.STORES.CLIENTS,
|
|
94
|
-
CryptographyService.constructSessionId(userId, client.id),
|
|
94
|
+
CryptographyService.constructSessionId(userId, client.id, domain),
|
|
95
95
|
transformedClient,
|
|
96
96
|
);
|
|
97
97
|
return transformedClient;
|
|
@@ -101,7 +101,7 @@ export class ClientDatabaseRepository {
|
|
|
101
101
|
const transformedClient = this.transformClient(userId, client, false, domain);
|
|
102
102
|
await this.storeEngine.create(
|
|
103
103
|
ClientDatabaseRepository.STORES.CLIENTS,
|
|
104
|
-
CryptographyService.constructSessionId(userId, client.id),
|
|
104
|
+
CryptographyService.constructSessionId(userId, client.id, domain),
|
|
105
105
|
transformedClient,
|
|
106
106
|
);
|
|
107
107
|
return transformedClient;
|
|
@@ -116,7 +116,7 @@ export class ClientDatabaseRepository {
|
|
|
116
116
|
return {
|
|
117
117
|
...client,
|
|
118
118
|
domain,
|
|
119
|
-
meta: {is_verified: verified, primary_key: CryptographyService.constructSessionId(userId, client.id)},
|
|
119
|
+
meta: {is_verified: verified, primary_key: CryptographyService.constructSessionId(userId, client.id, domain)},
|
|
120
120
|
};
|
|
121
121
|
}
|
|
122
122
|
|
|
@@ -20,14 +20,14 @@ export declare class CryptographyService {
|
|
|
20
20
|
cryptobox: Cryptobox;
|
|
21
21
|
private readonly database;
|
|
22
22
|
constructor(apiClient: APIClient, storeEngine: CRUDEngine);
|
|
23
|
-
static constructSessionId(userId: string, clientId: string): string;
|
|
23
|
+
static constructSessionId(userId: string, clientId: string, domain: string | null): string;
|
|
24
24
|
static convertArrayRecipientsToBase64(recipients: OTRRecipients<Uint8Array>): OTRRecipients<string>;
|
|
25
25
|
static convertBase64RecipientsToArray(recipients: OTRRecipients<string>): OTRRecipients<Uint8Array>;
|
|
26
26
|
createCryptobox(): Promise<SerializedPreKey[]>;
|
|
27
27
|
decrypt(sessionId: string, encodedCiphertext: string): Promise<Uint8Array>;
|
|
28
28
|
private static dismantleSessionId;
|
|
29
29
|
encryptQualified(plainText: Uint8Array, preKeyBundles: QualifiedUserPreKeyBundleMap): Promise<QualifiedOTRRecipients>;
|
|
30
|
-
encrypt(plainText: Uint8Array, preKeyBundles: UserPreKeyBundleMap): Promise<OTRRecipients<Uint8Array>>;
|
|
30
|
+
encrypt(plainText: Uint8Array, preKeyBundles: UserPreKeyBundleMap, domain?: string): Promise<OTRRecipients<Uint8Array>>;
|
|
31
31
|
private encryptPayloadForSession;
|
|
32
32
|
initCryptobox(): Promise<void>;
|
|
33
33
|
deleteCryptographyStores(): Promise<boolean[]>;
|
|
@@ -41,8 +41,9 @@ class CryptographyService {
|
|
|
41
41
|
markdown: false,
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
|
-
static constructSessionId(userId, clientId) {
|
|
45
|
-
|
|
44
|
+
static constructSessionId(userId, clientId, domain) {
|
|
45
|
+
const baseId = `${userId}@${clientId}`;
|
|
46
|
+
return domain ? `${domain}@${baseId}` : baseId;
|
|
46
47
|
}
|
|
47
48
|
static convertArrayRecipientsToBase64(recipients) {
|
|
48
49
|
return Object.fromEntries(Object.entries(recipients).map(([userId, otrClientMap]) => {
|
|
@@ -78,30 +79,34 @@ class CryptographyService {
|
|
|
78
79
|
return this.cryptobox.decrypt(sessionId, messageBytes.buffer);
|
|
79
80
|
}
|
|
80
81
|
static dismantleSessionId(sessionId) {
|
|
81
|
-
|
|
82
|
+
// see https://regex101.com/r/c8FtCw/1
|
|
83
|
+
const regex = /((?<domain>.+)@)?(?<userId>.+)@(?<clientId>.+)$/g;
|
|
84
|
+
const match = regex.exec(sessionId);
|
|
85
|
+
const { domain, userId, clientId } = (match === null || match === void 0 ? void 0 : match.groups) || {};
|
|
86
|
+
return { clientId, domain, userId };
|
|
82
87
|
}
|
|
83
88
|
async encryptQualified(plainText, preKeyBundles) {
|
|
84
89
|
const qualifiedOTRRecipients = {};
|
|
85
90
|
for (const [domain, preKeyBundleMap] of Object.entries(preKeyBundles)) {
|
|
86
|
-
qualifiedOTRRecipients[domain] = await this.encrypt(plainText, preKeyBundleMap);
|
|
91
|
+
qualifiedOTRRecipients[domain] = await this.encrypt(plainText, preKeyBundleMap, domain);
|
|
87
92
|
}
|
|
88
93
|
return qualifiedOTRRecipients;
|
|
89
94
|
}
|
|
90
|
-
async encrypt(plainText, preKeyBundles) {
|
|
95
|
+
async encrypt(plainText, preKeyBundles, domain) {
|
|
91
96
|
const recipients = {};
|
|
92
97
|
const bundles = [];
|
|
93
98
|
for (const userId in preKeyBundles) {
|
|
94
99
|
recipients[userId] = {};
|
|
95
100
|
for (const clientId in preKeyBundles[userId]) {
|
|
96
101
|
const { key: base64PreKey } = preKeyBundles[userId][clientId];
|
|
97
|
-
const sessionId = CryptographyService.constructSessionId(userId, clientId);
|
|
102
|
+
const sessionId = CryptographyService.constructSessionId(userId, clientId, domain || null);
|
|
98
103
|
bundles.push(this.encryptPayloadForSession(sessionId, plainText, base64PreKey));
|
|
99
104
|
}
|
|
100
105
|
}
|
|
101
106
|
const payloads = await Promise.all(bundles);
|
|
102
107
|
payloads.forEach(payload => {
|
|
103
108
|
const { encryptedPayload, sessionId } = payload;
|
|
104
|
-
const
|
|
109
|
+
const { userId, clientId } = CryptographyService.dismantleSessionId(sessionId);
|
|
105
110
|
recipients[userId][clientId] = encryptedPayload;
|
|
106
111
|
});
|
|
107
112
|
return recipients;
|
|
@@ -131,8 +136,8 @@ class CryptographyService {
|
|
|
131
136
|
this.logger.log(`Deleted session ID "${sessionId}".`);
|
|
132
137
|
}
|
|
133
138
|
async decodeGenericMessage(otrMessage, source) {
|
|
134
|
-
const { from, data: { sender, text: cipherText }, } = otrMessage;
|
|
135
|
-
const sessionId = CryptographyService.constructSessionId(from, sender);
|
|
139
|
+
const { from, qualified_from, data: { sender, text: cipherText }, } = otrMessage;
|
|
140
|
+
const sessionId = CryptographyService.constructSessionId(from, sender, (qualified_from === null || qualified_from === void 0 ? void 0 : qualified_from.domain) || null);
|
|
136
141
|
const decryptedMessage = await this.decrypt(sessionId, cipherText);
|
|
137
142
|
const genericMessage = protocol_messaging_1.GenericMessage.decode(decryptedMessage);
|
|
138
143
|
if (genericMessage.content === conversation_1.GenericMessageType.EPHEMERAL) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CryptographyService.js","sourceRoot":"","sources":["CryptographyService.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;;;;AAQH,kDAA6C;AAC7C,8CAAqD;AACrD,oEAA2D;AAE3D,yCAA2C;AAC3C,sDAA8B;AAE9B,kDAAuF;AAEvF,qFAAgF;AAChF,iEAA4D;AAS5D,MAAa,mBAAmB;IAM9B,YAAqB,SAAoB,EAAmB,WAAuB;QAA9D,cAAS,GAAT,SAAS,CAAW;QAAmB,gBAAW,GAAX,WAAW,CAAY;QACjF,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,+DAA8B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,GAAG,IAAA,iBAAO,EAAC,gDAAgD,EAAE;YACtE,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,kBAAkB,CAAC,MAAc,EAAE,QAAgB;
|
|
1
|
+
{"version":3,"file":"CryptographyService.js","sourceRoot":"","sources":["CryptographyService.ts"],"names":[],"mappings":"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"}
|
|
@@ -82,17 +82,6 @@ describe('CryptographyService', () => {
|
|
|
82
82
|
});
|
|
83
83
|
});
|
|
84
84
|
|
|
85
|
-
describe('"dismantleSessionId"', () => {
|
|
86
|
-
it('gets User ID and Client ID from a Session ID.', () => {
|
|
87
|
-
const clientId = '1ceb9063fced26d3';
|
|
88
|
-
const userId = 'afbb5d60-1187-4385-9c29-7361dea79647';
|
|
89
|
-
const sessionId = CryptographyService.constructSessionId(userId, clientId);
|
|
90
|
-
const [actualUserId, actualClientId] = CryptographyService.dismantleSessionId(sessionId);
|
|
91
|
-
expect(actualClientId).toBe(clientId);
|
|
92
|
-
expect(actualUserId).toBe(userId);
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
|
|
96
85
|
describe('"encrypt"', () => {
|
|
97
86
|
it('generates a set of encrypted data based on PreKeys from multiple clients.', async () => {
|
|
98
87
|
const firstUserID = 'bc0c99f1-49a5-4ad2-889a-62885af37088';
|
|
@@ -76,10 +76,18 @@ describe('CryptographyService', () => {
|
|
|
76
76
|
it('constructs a Session ID by a given User ID and Client ID.', () => {
|
|
77
77
|
const clientId = '1ceb9063fced26d3';
|
|
78
78
|
const userId = 'afbb5d60-1187-4385-9c29-7361dea79647';
|
|
79
|
-
const actual = CryptographyService_1.CryptographyService.constructSessionId(userId, clientId);
|
|
79
|
+
const actual = CryptographyService_1.CryptographyService.constructSessionId(userId, clientId, null);
|
|
80
80
|
expect(actual).toContain(clientId);
|
|
81
81
|
expect(actual).toContain(userId);
|
|
82
82
|
});
|
|
83
|
+
it('constructs a Session ID by a given User ID and Client ID and domain.', () => {
|
|
84
|
+
const clientId = '1ceb9063fced26d3';
|
|
85
|
+
const userId = 'afbb5d60-1187-4385-9c29-7361dea79647';
|
|
86
|
+
const actual = CryptographyService_1.CryptographyService.constructSessionId(userId, clientId, 'test.wire.link');
|
|
87
|
+
expect(actual).toContain(clientId);
|
|
88
|
+
expect(actual).toContain(userId);
|
|
89
|
+
expect(actual).toContain('test.wire.link');
|
|
90
|
+
});
|
|
83
91
|
});
|
|
84
92
|
describe('"decrypt"', () => {
|
|
85
93
|
it('decrypts a Base64-encoded cipher message.', async () => {
|
|
@@ -107,13 +115,22 @@ describe('CryptographyService', () => {
|
|
|
107
115
|
});
|
|
108
116
|
});
|
|
109
117
|
describe('"dismantleSessionId"', () => {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
expect(
|
|
118
|
+
const clientId = '1ceb9063fced26d3';
|
|
119
|
+
const userId = 'afbb5d60-1187-4385-9c29-7361dea79647';
|
|
120
|
+
const domain = 'domain.wire.link';
|
|
121
|
+
it('gets User ID and Client ID from a Session ID without domain.', () => {
|
|
122
|
+
const sessionId = CryptographyService_1.CryptographyService.constructSessionId(userId, clientId, null);
|
|
123
|
+
const res = CryptographyService_1.CryptographyService['dismantleSessionId'](sessionId);
|
|
124
|
+
expect(res.clientId).toBe(clientId);
|
|
125
|
+
expect(res.userId).toBe(userId);
|
|
126
|
+
expect(res.domain).toBe(undefined);
|
|
127
|
+
});
|
|
128
|
+
it('gets User ID and Client ID from a Session ID with domain.', () => {
|
|
129
|
+
const sessionId = CryptographyService_1.CryptographyService.constructSessionId(userId, clientId, domain);
|
|
130
|
+
const res = CryptographyService_1.CryptographyService['dismantleSessionId'](sessionId);
|
|
131
|
+
expect(res.clientId).toBe(clientId);
|
|
132
|
+
expect(res.userId).toBe(userId);
|
|
133
|
+
expect(res.domain).toBe(domain);
|
|
117
134
|
});
|
|
118
135
|
});
|
|
119
136
|
describe('"encrypt"', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CryptographyService.test.node.js","sourceRoot":"","sources":["CryptographyService.test.node.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;;;;;;;;;;;;;;;;;;;AAEH,oDAA8C;AAC9C,kDAA6C;AAC7C,0DAA4C;AAC5C,wDAA+D;AAC/D,qDAAuC;AACvC,+CAAiC;AACjC,+BAA+B;AAE/B,+EAAiE;AACjE,qEAAoE;AACpE,+DAA0D;AAE1D,KAAK,UAAU,YAAY,CAAC,SAAiB;IAC3C,MAAM,MAAM,GAAG,IAAI,2BAAY,EAAE,CAAC;IAClC,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,mBAAwC,CAAC;IAC7C,IAAI,qBAA0C,CAAC;IAC/C,IAAI,GAAc,CAAC;IAEnB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,mBAAmB,GAAG,IAAI,yCAAmB,CAAC,IAAI,sBAAS,EAAE,EAAE,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3F,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QAC7D,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACzG,GAAG,GAAG,IAAI,qBAAS,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;YAC9B,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,UAAU,CAAE,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAC1F,MAAM,CAAC,mBAAmB,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,QAAQ,GAAG,kBAAkB,CAAC;YACpC,MAAM,MAAM,GAAG,sCAAsC,CAAC;YACtD,MAAM,MAAM,GAAG,yCAAmB,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"CryptographyService.test.node.js","sourceRoot":"","sources":["CryptographyService.test.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,10 +63,19 @@ describe('CryptographyService', () => {
|
|
|
63
63
|
it('constructs a Session ID by a given User ID and Client ID.', () => {
|
|
64
64
|
const clientId = '1ceb9063fced26d3';
|
|
65
65
|
const userId = 'afbb5d60-1187-4385-9c29-7361dea79647';
|
|
66
|
-
const actual = CryptographyService.constructSessionId(userId, clientId);
|
|
66
|
+
const actual = CryptographyService.constructSessionId(userId, clientId, null);
|
|
67
67
|
expect(actual).toContain(clientId);
|
|
68
68
|
expect(actual).toContain(userId);
|
|
69
69
|
});
|
|
70
|
+
|
|
71
|
+
it('constructs a Session ID by a given User ID and Client ID and domain.', () => {
|
|
72
|
+
const clientId = '1ceb9063fced26d3';
|
|
73
|
+
const userId = 'afbb5d60-1187-4385-9c29-7361dea79647';
|
|
74
|
+
const actual = CryptographyService.constructSessionId(userId, clientId, 'test.wire.link');
|
|
75
|
+
expect(actual).toContain(clientId);
|
|
76
|
+
expect(actual).toContain(userId);
|
|
77
|
+
expect(actual).toContain('test.wire.link');
|
|
78
|
+
});
|
|
70
79
|
});
|
|
71
80
|
|
|
72
81
|
describe('"decrypt"', () => {
|
|
@@ -101,13 +110,24 @@ describe('CryptographyService', () => {
|
|
|
101
110
|
});
|
|
102
111
|
|
|
103
112
|
describe('"dismantleSessionId"', () => {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
113
|
+
const clientId = '1ceb9063fced26d3';
|
|
114
|
+
const userId = 'afbb5d60-1187-4385-9c29-7361dea79647';
|
|
115
|
+
const domain = 'domain.wire.link';
|
|
116
|
+
|
|
117
|
+
it('gets User ID and Client ID from a Session ID without domain.', () => {
|
|
118
|
+
const sessionId = CryptographyService.constructSessionId(userId, clientId, null);
|
|
119
|
+
const res = CryptographyService['dismantleSessionId'](sessionId);
|
|
120
|
+
expect(res.clientId).toBe(clientId);
|
|
121
|
+
expect(res.userId).toBe(userId);
|
|
122
|
+
expect(res.domain).toBe(undefined);
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it('gets User ID and Client ID from a Session ID with domain.', () => {
|
|
126
|
+
const sessionId = CryptographyService.constructSessionId(userId, clientId, domain);
|
|
127
|
+
const res = CryptographyService['dismantleSessionId'](sessionId);
|
|
128
|
+
expect(res.clientId).toBe(clientId);
|
|
129
|
+
expect(res.userId).toBe(userId);
|
|
130
|
+
expect(res.domain).toBe(domain);
|
|
111
131
|
});
|
|
112
132
|
});
|
|
113
133
|
|
|
@@ -57,8 +57,9 @@ export class CryptographyService {
|
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
public static constructSessionId(userId: string, clientId: string): string {
|
|
61
|
-
|
|
60
|
+
public static constructSessionId(userId: string, clientId: string, domain: string | null): string {
|
|
61
|
+
const baseId = `${userId}@${clientId}`;
|
|
62
|
+
return domain ? `${domain}@${baseId}` : baseId;
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
public static convertArrayRecipientsToBase64(recipients: OTRRecipients<Uint8Array>): OTRRecipients<string> {
|
|
@@ -107,8 +108,12 @@ export class CryptographyService {
|
|
|
107
108
|
return this.cryptobox.decrypt(sessionId, messageBytes.buffer);
|
|
108
109
|
}
|
|
109
110
|
|
|
110
|
-
private static dismantleSessionId(sessionId: string): string
|
|
111
|
-
|
|
111
|
+
private static dismantleSessionId(sessionId: string): {clientId: string; domain?: string; userId: string} {
|
|
112
|
+
// see https://regex101.com/r/c8FtCw/1
|
|
113
|
+
const regex = /((?<domain>.+)@)?(?<userId>.+)@(?<clientId>.+)$/g;
|
|
114
|
+
const match = regex.exec(sessionId);
|
|
115
|
+
const {domain, userId, clientId} = match?.groups || {};
|
|
116
|
+
return {clientId, domain, userId};
|
|
112
117
|
}
|
|
113
118
|
|
|
114
119
|
public async encryptQualified(
|
|
@@ -118,13 +123,17 @@ export class CryptographyService {
|
|
|
118
123
|
const qualifiedOTRRecipients: QualifiedOTRRecipients = {};
|
|
119
124
|
|
|
120
125
|
for (const [domain, preKeyBundleMap] of Object.entries(preKeyBundles)) {
|
|
121
|
-
qualifiedOTRRecipients[domain] = await this.encrypt(plainText, preKeyBundleMap);
|
|
126
|
+
qualifiedOTRRecipients[domain] = await this.encrypt(plainText, preKeyBundleMap, domain);
|
|
122
127
|
}
|
|
123
128
|
|
|
124
129
|
return qualifiedOTRRecipients;
|
|
125
130
|
}
|
|
126
131
|
|
|
127
|
-
public async encrypt(
|
|
132
|
+
public async encrypt(
|
|
133
|
+
plainText: Uint8Array,
|
|
134
|
+
preKeyBundles: UserPreKeyBundleMap,
|
|
135
|
+
domain?: string,
|
|
136
|
+
): Promise<OTRRecipients<Uint8Array>> {
|
|
128
137
|
const recipients: OTRRecipients<Uint8Array> = {};
|
|
129
138
|
const bundles: Promise<SessionPayloadBundle>[] = [];
|
|
130
139
|
|
|
@@ -133,7 +142,7 @@ export class CryptographyService {
|
|
|
133
142
|
|
|
134
143
|
for (const clientId in preKeyBundles[userId]) {
|
|
135
144
|
const {key: base64PreKey} = preKeyBundles[userId][clientId];
|
|
136
|
-
const sessionId = CryptographyService.constructSessionId(userId, clientId);
|
|
145
|
+
const sessionId = CryptographyService.constructSessionId(userId, clientId, domain || null);
|
|
137
146
|
bundles.push(this.encryptPayloadForSession(sessionId, plainText, base64PreKey));
|
|
138
147
|
}
|
|
139
148
|
}
|
|
@@ -142,7 +151,7 @@ export class CryptographyService {
|
|
|
142
151
|
|
|
143
152
|
payloads.forEach(payload => {
|
|
144
153
|
const {encryptedPayload, sessionId} = payload;
|
|
145
|
-
const
|
|
154
|
+
const {userId, clientId} = CryptographyService.dismantleSessionId(sessionId);
|
|
146
155
|
recipients[userId][clientId] = encryptedPayload;
|
|
147
156
|
});
|
|
148
157
|
|
|
@@ -189,10 +198,11 @@ export class CryptographyService {
|
|
|
189
198
|
): Promise<PayloadBundle> {
|
|
190
199
|
const {
|
|
191
200
|
from,
|
|
201
|
+
qualified_from,
|
|
192
202
|
data: {sender, text: cipherText},
|
|
193
203
|
} = otrMessage;
|
|
194
204
|
|
|
195
|
-
const sessionId = CryptographyService.constructSessionId(from, sender);
|
|
205
|
+
const sessionId = CryptographyService.constructSessionId(from, sender, qualified_from?.domain || null);
|
|
196
206
|
const decryptedMessage = await this.decrypt(sessionId, cipherText);
|
|
197
207
|
const genericMessage = GenericMessage.decode(decryptedMessage);
|
|
198
208
|
|