{"version":3,"sources":["jsdelivr-header.js","/npm/dlc@0.2.1/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,aAGA,MAAM,QAAU,QAAQ,mBAClB,OAAS,QAAQ,UACjB,IAAM,QAAQ,UAOd,IAAM,mBAMN,GAAM,mBAMN,IAAM,qFAMN,cAAgB,uBAOtB,eAAe,QAAQ,GACrB,IAAI,EAAS,EAAK,OAAO,IACrB,EAAU,OAAO,KAAK,EAAK,MAAM,GAAI,IAAI,WAAY,UAEzD,IACE,IAAI,QAAW,QAAQ,GAAG,MAAM,KAC5B,EAAa,OAAO,KAAK,EAAG,MAAM,eAAe,GAAI,UAErD,QAAsB,YAAY,EAAY,IAAK,GAAI,GAAG,OAAO,GAAQ,QAAQ,MACjF,QAAsB,YAAY,EAAS,EAAc,EAAc,GAAG,OAAO,GAAQ,QAAQ,MAErG,aAAa,SAAS,OAAO,KAAK,EAAe,UACnD,CAAE,MAAO,GACP,OAAO,QAAQ,OAAO,EACxB,CACF,CAUA,SAAS,YAAY,EAAM,EAAK,EAAI,GAClC,IAAI,EAAW,OAAO,iBAAiB,cAAe,EAAK,GAE3D,OADA,EAAS,eAAe,GAAW,GAC5B,QAAQ,QAAQ,EAAS,OAAO,EAAM,SAAU,QACzD,CAOA,SAAS,SAAU,GACjB,OAAO,IAAI,SAAQ,SAAS,EAAS,GACnC,IAAI,YAAY,EAAI,SAAS,SAAS,SAAS,EAAK,GAClD,OAAK,EACE,EAAO,GADG,EAAQ,EAE3B,GACF,GACF,CAGA,OAAO,QAAU","file":"/npm/dlc@0.2.1/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/dlc@0.2.1/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict'\n\n// Dependencies\nconst request = require('request-promise')\nconst crypto = require('crypto')\nconst xml = require('xml2js')\n\n// Constants\n/**\n * Key for the decryption\n * @type {String}\n */\nconst KEY = 'cb99b5cbc24db398'\n\n/**\n * Initialization vector\n * @type {String}\n */\nconst IV  = '9bc24cb995cb8db3'\n\n/**\n * JD service for the encrypted key\n * @type {String}\n */\nconst URL = 'http://service.jdownloader.org/dlcrypt/service.php?srcType=dlc&destType=pylo&data='\n\n/**\n * The expression for encrypted key from JD.org\n * @type {Regex}\n */\nconst RC_EXPRESSION = /<rc>([\\s\\S]+)<\\/rc>/i\n\n/**\n * Decrypt dlc container\n * @todo   use maybe async/await or promises and clean up\n * @return {[type]} [description]\n */\nasync function decrypt(file) {\n  let dlcKey = file.slice(-88) // get the last 88 chars (this is our key)\n  let dlcData = Buffer.from(file.slice(0, -88).toString(), 'base64') // the rest is the content\n\n  try {\n    let rc = await request(`${URL}${dlcKey}`)\n    let strippedRc = Buffer.from(rc.match(RC_EXPRESSION)[1], 'base64')\n\n    let decryptedKey  = await aes_decrypt(strippedRc, KEY, IV, 0).catch((err) => console.log)\n    let decryptedData = await aes_decrypt(dlcData, decryptedKey, decryptedKey, 0).catch((err) => console.log)\n\n    return await parseXML(Buffer.from(decryptedData, 'base64'))\n  } catch (e) {\n    return Promise.reject(e)\n  }\n}\n\n/**\n * Decrypts the input data with the key and initializing vector\n * @param  {String} data    The string to decrypt\n * @param  {string} key     The key for decrypting\n * @param  {string} iv      The init vector\n * @param  {Number} padding The padding of decipher defaults to 0\n * @return {String}         Returns a decrypted string (from binary to utf8)\n */\nfunction aes_decrypt(data, key, iv, padding) {\n  let decipher = crypto.createDecipheriv('AES-128-CBC', key, iv)\n  decipher.setAutoPadding(padding || 0)\n  return Promise.resolve(decipher.update(data, 'binary', 'utf8'))\n}\n\n/**\n * [description]\n * @param  {[type]} buf [description]\n * @return {[type]}       [description]\n */\nfunction parseXML (buf) {\n  return new Promise(function(resolve, reject) {\n    xml.parseString(buf.toString('utf8'), function(err, result) {\n      if (!err) return resolve(result)\n      return reject(err)\n    })\n  })\n}\n\n// export public interface\nmodule.exports = decrypt\n"]}