Module 993760

4,825 characters · in no known chunk
Dependencies
Required by (1)
Lazily required by (0)none
Lazily requires (0)none
Source Raw
function(e,t,n){"use strict";n.d(t,{m:()=>l}),n(323874),n(14289),n(35956);var r=n(972347),i=n(118356),s=n(205693),a=n(206607),o=n(264572).Buffer;class l extends r.A{logger;dave;transientKeys;mlsSession;encryptionWorker;userId;currentEncryptorProtocolVersion=0;recognizedUserIds=new Set;secureFramesTransitions=new Map;latestPreparedTransitionVersion=0;lastSecureFramesStateUpdate=null;constructor(e,t,n){super(),this.logger=new i.Vy("DaveSessionManager"),this.dave=e,this.transientKeys=t,this.userId=n;const r="",a="";this.mlsSession=new e.Session(r,a,(e,t)=>{this.emit(s.yq.MLSFailure,e,t)}),this.encryptionWorker=this.setupEncryptionWorker()}createUser(e){this.recognizedUserIds.add(e),this.setupKeyRatchetForUser(e,this.latestPreparedTransitionVersion,a.jU.DECRYPT)}destroyUser(e){this.recognizedUserIds.delete(e),this.encryptionWorker.postMessage({type:a.lA.DESTROY_USER,userId:e})}updateLocalUserCodecs(e,t){this.encryptionWorker.postMessage({type:a.lA.UPDATE_CODECS,audioCodec:e,videoCodec:t})}updateSsrcs(e,t,n){this.encryptionWorker.postMessage({type:a.lA.UPDATE_SSRC,userId:e,audioSsrc:t,videoSsrcs:n})}setupEncodedTransformsForTransceiver(e){this.setupEncodedTransforms(e.sender),this.setupEncodedTransforms(e.receiver)}prepareSecureFramesTransition(e,t,n){this.prepareSecureFramesRatchets(e,t),n()}prepareSecureFramesEpoch(e,t,n){if("1"===e){let e=null;null!=this.transientKeys&&(e=this.transientKeys.GetTransientPrivateKey(t)),this.mlsSession.Init(t,BigInt(n),this.userId,e),this.onSecureFramesStateChanged()}else this.mlsSession.SetProtocolVersion(t)}executeSecureFramesTransition(e){if(!this.secureFramesTransitions.has(e))return void this.logger.warn("[TAG] Transition ID "+e+" not found, ignoring.");let t=this.secureFramesTransitions.get(e);this.secureFramesTransitions.delete(e),t===this.dave.kDisabledVersion&&this.mlsSession.Reset(),this.setupKeyRatchetForUser(this.userId,t,a.jU.ENCRYPT),this.onSecureFramesStateChanged()}getMLSKeyPackage(e){e(this.mlsSession.GetMarshalledKeyPackage())}updateMLSExternalSender(e){this.mlsSession.SetExternalSender(e)}processMLSProposals(e,t){let n=this.mlsSession.ProcessProposals(e,this.getRecognizedUserIDs());n&&t(n)}prepareMLSCommitTransition(e,t,n){let r=this.mlsSession.ProcessCommit(t),i=null!=r.rosterUpdate;i&&this.prepareSecureFramesRatchets(e,this.mlsSession.GetProtocolVersion()),r.ignored||n(i,this.mlsSession.GetProtocolVersion(),r.rosterUpdate)}processMLSWelcome(e,t,n){let r=this.mlsSession.ProcessWelcome(t,this.getRecognizedUserIDs()),i=null!=r;r&&this.prepareSecureFramesRatchets(e,this.mlsSession.GetProtocolVersion()),n(i,this.mlsSession.GetProtocolVersion(),r)}setupEncryptionWorker(){let e=new Worker(new URL("/assets/"+n.u("52584"),n.b),Object.assign({},{name:"encryption-worker"},{type:void 0}));return e.onmessage=e=>{let{data:t}=e;t.type===a.h5.PROTOCOL_VERSION_CHANGED?(this.currentEncryptorProtocolVersion=t.protocolVersion,this.onSecureFramesStateChanged()):this.logger.warn("Unknown message type from encryption worker",t)},e.onerror=e=>{this.logger.error("Encryption worker error",e)},e.onmessageerror=e=>{this.logger.error("Encryption worker message error",e)},e.postMessage({type:a.lA.INITIALIZE}),e}getRecognizedUserIDs(){return Array.from(this.recognizedUserIds).concat([this.userId])}makeUserKeyRatchet(e,t){return t===this.dave.kDisabledVersion?null:this.mlsSession.GetKeyRatchet(e)}setupEncodedTransforms(e){if("transform"in e)e.transform=new RTCRtpScriptTransform(this.encryptionWorker,{});else if("createEncodedStreams"in e){let{readable:t,writable:n}=e.createEncodedStreams();this.encryptionWorker.postMessage({type:a.lA.RTC_TRANSFORM,readable:t,writable:n},[t,n])}else throw Error("Encoded transforms not supported")}setupKeyRatchetForUser(e,t,n){let r=this.makeUserKeyRatchet(e,t);this.encryptionWorker.postMessage({type:a.lA.SET_KEY_RATCHET,userId:e,operation:n,protocolVersion:t,keyRatchet:r})}prepareSecureFramesRatchets(e,t){for(let e of this.getRecognizedUserIDs())e!==this.userId&&this.setupKeyRatchetForUser(e,t,a.jU.DECRYPT);e===this.dave.kInitTransitionId?(this.setupKeyRatchetForUser(this.userId,t,a.jU.ENCRYPT),this.onSecureFramesStateChanged()):this.secureFramesTransitions.set(e,t),this.latestPreparedTransitionVersion=t}onSecureFramesStateChanged(){let e={version:this.currentEncryptorProtocolVersion??this.dave.kDisabledVersion,epochAuthenticator:""};if(e.version!==this.dave.kDisabledVersion){let t=this.mlsSession.GetLastEpochAuthenticator();e.epochAuthenticator=o.from(t).toString("base64")}(null==this.lastSecureFramesStateUpdate||this.lastSecureFramesStateUpdate.version!==e.version||this.lastSecureFramesStateUpdate.epochAuthenticator!==e.epochAuthenticator)&&(this.logger.info(`DAVE protocol state update: ${JSON.stringify(e)}`),this.emit(s.yq.SecureFramesUpdate,e),this.lastSecureFramesStateUpdate=e)}}}