Playlist Downloads are now working
[DeezloaderRemix.git] / app / lib / deezer-api / utils.js
1 const crypto = require('crypto')
2
3 function md5 (data, type = 'binary') {
4   let md5sum = crypto.createHash('md5')
5   md5sum.update(new Buffer(data, type))
6   return md5sum.digest('hex')
7 }
8
9 function ecbCrypt (key, data) {
10   let cipher = crypto.createCipheriv("aes-128-ecb", new Buffer(key), new Buffer(""));
11   return Buffer.concat([cipher.update(data, 'binary'), cipher.final()]).toString("hex").toLowerCase();
12 }
13
14 function getBlowfishKey(trackId) {
15         var SECRET = 'g4el58wc'+'0zvf9na1';
16         var idMd5 = md5(trackId.toString(), 'ascii')
17         var bfKey = ''
18         for (let i = 0; i < 16; i++) {
19                 bfKey += String.fromCharCode(idMd5.charCodeAt(i) ^ idMd5.charCodeAt(i + 16) ^ SECRET.charCodeAt(i))
20         }
21         return bfKey;
22 }
23
24 function decryptChunk(chunk, blowFishKey){
25   var cipher = crypto.createDecipheriv('bf-cbc', blowFishKey, Buffer.from([0, 1, 2, 3, 4, 5, 6, 7]))
26   cipher.setAutoPadding(false)
27   return cipher.update(chunk, 'binary', 'binary') + cipher.final()
28 }
29
30 function sleep(ms) {
31   return new Promise(resolve => setTimeout(resolve, ms));
32 }
33
34 module.exports = {
35   md5: md5,
36   ecbCrypt: ecbCrypt,
37   getBlowfishKey: getBlowfishKey,
38   decryptChunk: decryptChunk,
39   sleep: sleep
40 }