livekit-client 2.0.7 → 2.0.9
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/livekit-client.e2ee.worker.js +1 -1
- package/dist/livekit-client.e2ee.worker.js.map +1 -1
- package/dist/livekit-client.e2ee.worker.mjs +33 -9
- package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
- package/dist/livekit-client.esm.mjs +70 -41
- package/dist/livekit-client.esm.mjs.map +1 -1
- package/dist/livekit-client.umd.js +1 -1
- package/dist/livekit-client.umd.js.map +1 -1
- package/dist/src/e2ee/constants.d.ts +0 -1
- package/dist/src/e2ee/constants.d.ts.map +1 -1
- package/dist/src/e2ee/types.d.ts +1 -0
- package/dist/src/e2ee/types.d.ts.map +1 -1
- package/dist/src/e2ee/worker/FrameCryptor.d.ts.map +1 -1
- package/dist/src/e2ee/worker/ParticipantKeyHandler.d.ts.map +1 -1
- package/dist/src/index.d.ts +7 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/room/PCTransport.d.ts.map +1 -1
- package/dist/src/room/RTCEngine.d.ts.map +1 -1
- package/dist/src/room/participant/LocalParticipant.d.ts.map +1 -1
- package/dist/src/room/participant/publishUtils.d.ts.map +1 -1
- package/dist/src/room/track/LocalTrack.d.ts.map +1 -1
- package/dist/ts4.2/src/e2ee/constants.d.ts +0 -1
- package/dist/ts4.2/src/e2ee/types.d.ts +1 -0
- package/dist/ts4.2/src/index.d.ts +7 -6
- package/package.json +1 -1
- package/src/e2ee/constants.ts +1 -5
- package/src/e2ee/types.ts +1 -0
- package/src/e2ee/worker/FrameCryptor.ts +12 -0
- package/src/e2ee/worker/ParticipantKeyHandler.ts +4 -2
- package/src/e2ee/worker/e2ee.worker.ts +24 -3
- package/src/index.ts +32 -29
- package/src/room/PCTransport.ts +6 -18
- package/src/room/RTCEngine.ts +4 -3
- package/src/room/participant/LocalParticipant.ts +21 -6
- package/src/room/participant/publishUtils.ts +38 -11
- package/src/room/track/LocalTrack.ts +11 -9
@@ -327,10 +327,6 @@ livekitLogger.setDefaultLevel(LogLevel.info);
|
|
327
327
|
const workerLogger = loglevelExports.getLogger('lk-e2ee');
|
328
328
|
|
329
329
|
const ENCRYPTION_ALGORITHM = 'AES-GCM';
|
330
|
-
// We use a ringbuffer of keys so we can change them and still decode packets that were
|
331
|
-
// encrypted with an old key. We use a size of 16 which corresponds to the four bits
|
332
|
-
// in the frame trailer.
|
333
|
-
const KEYRING_SIZE = 16;
|
334
330
|
// How many consecutive frames can fail decrypting before a particular key gets marked as invalid
|
335
331
|
const DECRYPTION_FAILURE_TOLERANCE = 10;
|
336
332
|
// We copy the first bytes of the VP8 payload unencrypted.
|
@@ -358,7 +354,8 @@ const KEY_PROVIDER_DEFAULTS = {
|
|
358
354
|
sharedKey: false,
|
359
355
|
ratchetSalt: SALT,
|
360
356
|
ratchetWindowSize: 8,
|
361
|
-
failureTolerance: DECRYPTION_FAILURE_TOLERANCE
|
357
|
+
failureTolerance: DECRYPTION_FAILURE_TOLERANCE,
|
358
|
+
keyringSize: 16
|
362
359
|
};
|
363
360
|
const MAX_SIF_COUNT = 100;
|
364
361
|
const MAX_SIF_DURATION = 2000;
|
@@ -1002,6 +999,12 @@ class FrameCryptor extends BaseFrameCryptor {
|
|
1002
999
|
* @param keys
|
1003
1000
|
*/
|
1004
1001
|
setParticipant(id, keys) {
|
1002
|
+
workerLogger.debug('setting new participant on cryptor', Object.assign(Object.assign({}, this.logContext), {
|
1003
|
+
participant: id
|
1004
|
+
}));
|
1005
|
+
if (this.participantIdentity) {
|
1006
|
+
workerLogger.error('cryptor has already a participant set, participant should have been unset before', Object.assign({}, this.logContext));
|
1007
|
+
}
|
1005
1008
|
this.participantIdentity = id;
|
1006
1009
|
this.keys = keys;
|
1007
1010
|
this.sifGuard.reset();
|
@@ -1497,7 +1500,10 @@ class ParticipantKeyHandler extends eventsExports.EventEmitter {
|
|
1497
1500
|
this.decryptionFailureCount = 0;
|
1498
1501
|
this._hasValidKey = true;
|
1499
1502
|
this.currentKeyIndex = 0;
|
1500
|
-
|
1503
|
+
if (keyProviderOptions.keyringSize < 1 || keyProviderOptions.keyringSize > 255) {
|
1504
|
+
throw new TypeError('Keyring size needs to be between 1 and 256');
|
1505
|
+
}
|
1506
|
+
this.cryptoKeyRing = new Array(keyProviderOptions.keyringSize).fill(undefined);
|
1501
1507
|
this.keyProviderOptions = keyProviderOptions;
|
1502
1508
|
this.ratchetPromiseMap = new Map();
|
1503
1509
|
this.participantIdentity = participantIdentity;
|
@@ -1649,7 +1655,7 @@ onmessage = ev => {
|
|
1649
1655
|
break;
|
1650
1656
|
case 'enable':
|
1651
1657
|
setEncryptionEnabled(data.enabled, data.participantIdentity);
|
1652
|
-
workerLogger.info(
|
1658
|
+
workerLogger.info("updated e2ee enabled status for ".concat(data.participantIdentity, " to ").concat(data.enabled));
|
1653
1659
|
// acknowledge enable call successful
|
1654
1660
|
postMessage(ev.data);
|
1655
1661
|
break;
|
@@ -1709,7 +1715,18 @@ function handleRatchetRequest(data) {
|
|
1709
1715
|
});
|
1710
1716
|
}
|
1711
1717
|
function getTrackCryptor(participantIdentity, trackId) {
|
1712
|
-
let
|
1718
|
+
let cryptors = participantCryptors.filter(c => c.getTrackId() === trackId);
|
1719
|
+
if (cryptors.length > 1) {
|
1720
|
+
const debugInfo = cryptors.map(c => {
|
1721
|
+
return {
|
1722
|
+
participant: c.getParticipantIdentity()
|
1723
|
+
};
|
1724
|
+
}).join(',');
|
1725
|
+
workerLogger.error("Found multiple cryptors for the same trackID ".concat(trackId, ". target participant: ").concat(participantIdentity, " "), {
|
1726
|
+
participants: debugInfo
|
1727
|
+
});
|
1728
|
+
}
|
1729
|
+
let cryptor = cryptors[0];
|
1713
1730
|
if (!cryptor) {
|
1714
1731
|
workerLogger.info('creating new cryptor for', {
|
1715
1732
|
participantIdentity
|
@@ -1751,7 +1768,14 @@ function getSharedKeyHandler() {
|
|
1751
1768
|
return sharedKeyHandler;
|
1752
1769
|
}
|
1753
1770
|
function unsetCryptorParticipant(trackId, participantIdentity) {
|
1754
|
-
const
|
1771
|
+
const cryptors = participantCryptors.filter(c => c.getParticipantIdentity() === participantIdentity && c.getTrackId() === trackId);
|
1772
|
+
if (cryptors.length > 1) {
|
1773
|
+
workerLogger.error('Found multiple cryptors for the same participant and trackID combination', {
|
1774
|
+
trackId,
|
1775
|
+
participantIdentity
|
1776
|
+
});
|
1777
|
+
}
|
1778
|
+
const cryptor = cryptors[0];
|
1755
1779
|
if (!cryptor) {
|
1756
1780
|
workerLogger.warn('Could not unset participant on cryptor', {
|
1757
1781
|
trackId,
|