tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

clearkey-messagehandler.js (1890B)


      1 // Expect utf8decoder and utf8decoder to be TextEncoder('utf-8') and TextDecoder('utf-8') respectively
      2 
      3 function MessageHandler( keysystem, content ) {
      4    this._keysystem = keysystem;
      5    this._content = content;
      6    this.messagehandler = MessageHandler.prototype.messagehandler.bind( this );
      7    this.servercertificate = undefined;
      8 }
      9 
     10 MessageHandler.prototype.messagehandler = function messagehandler( messageType, message )
     11 {
     12    if ( messageType === 'license-request' )
     13    {
     14        var request = fromUtf8( message );
     15 
     16        var keys = request.kids.map( function( kid ) {
     17 
     18            var key;
     19            for( var i=0; i < this._content.keys.length; ++i )
     20            {
     21                if ( base64urlEncode( this._content.keys[ i ].kid ) === kid )
     22                {
     23                    key = base64urlEncode( this._content.keys[ i ].key );
     24                    break;
     25                }
     26            }
     27 
     28            return { kty: 'oct', kid: kid, k: key };
     29 
     30        }.bind( this ) );
     31 
     32        return Promise.resolve( toUtf8( { keys: keys } ) );
     33    }
     34    else if ( messageType === 'license-release' )
     35    {
     36        var release = fromUtf8( message );
     37 
     38        // TODO: Check the license release message here
     39 
     40        return Promise.resolve( toUtf8( { kids: release.kids } ) );
     41    }
     42 
     43    throw new TypeError( 'Unsupported message type for ClearKey' );
     44 };
     45 
     46 MessageHandler.prototype.createJWKSet = function createJWKSet(keyId, key) {
     47    var jwkSet = '{"keys":[';
     48    for (var i = 0; i < arguments.length; i++) {
     49        if (i != 0)
     50            jwkSet += ',';
     51        jwkSet += arguments[i];
     52    }
     53    jwkSet += ']}';
     54    return jwkSet;
     55 };
     56 
     57 MessageHandler.prototype.createJWK = function createJWK(keyId, key) {
     58    var jwk = '{"kty":"oct","alg":"A128KW","kid":"';
     59    jwk += base64urlEncode(keyId);
     60    jwk += '","k":"';
     61    jwk += base64urlEncode(key);
     62    jwk += '"}';
     63    return jwk;
     64 };