🐛 Update decryption keys

This commit is contained in:
C-3PO 2018-07-05 02:55:18 +02:00
parent 3e9f4843f8
commit dac2e9286c
Signed by: c3po
GPG key ID: 62993C4BB4D86F24
2 changed files with 7 additions and 5 deletions

View file

@ -1,6 +1,6 @@
import updateKeys from './lib/updateKeys'; import updateKeys from './lib/updateKeys';
export default function decryptChunk(encryptedChunk: Buffer, [key0, key1, key2]: [number, number, number]): Buffer { export default function decryptChunk(encryptedChunk: Buffer, [key0, key1, key2]: [number, number, number]): {decryptedChunk: Buffer, keys: [number, number, number]} {
const dv = new DataView(encryptedChunk.buffer); const dv = new DataView(encryptedChunk.buffer);
const decryptedChunk = Buffer.alloc(encryptedChunk.length); const decryptedChunk = Buffer.alloc(encryptedChunk.length);
@ -21,5 +21,5 @@ export default function decryptChunk(encryptedChunk: Buffer, [key0, key1, key2]:
[key0, key1, key2] = updateKeys([key0, key1, key2], curChar); [key0, key1, key2] = updateKeys([key0, key1, key2], curChar);
} }
return decryptedChunk; return { decryptedChunk, keys: [key0, key1, key2] };
} }

View file

@ -1,7 +1,7 @@
import * as stream from 'stream'; import * as stream from 'stream';
import decryptChunk from '../decryption/decryptChunk'; import decryptChunk from '../decryption/decryptChunk';
export default function decryptStream(inputStream: stream.Readable, decryptionKeys: [number, number, number]): stream.Readable { export default function decryptStream(inputStream: stream.Readable, [key0, key1, key2]: [number, number, number]): stream.Readable {
let skippedRandomHeader = false; let skippedRandomHeader = false;
const outStream = new stream.Readable({ const outStream = new stream.Readable({
@ -9,7 +9,8 @@ export default function decryptStream(inputStream: stream.Readable, decryptionKe
//There are 12 random bytes at the beginning, we need to use them to initialize the decryption keys, but we can ignore the decrypted bytes. //There are 12 random bytes at the beginning, we need to use them to initialize the decryption keys, but we can ignore the decrypted bytes.
if (!skippedRandomHeader) { if (!skippedRandomHeader) {
const encryptedHeader: Buffer = inputStream.read(12); const encryptedHeader: Buffer = inputStream.read(12);
decryptChunk(encryptedHeader, decryptionKeys); const { keys } = decryptChunk(encryptedHeader, [key0, key1, key2]);
[key0, key1, key2] = keys;
skippedRandomHeader = true; skippedRandomHeader = true;
} }
@ -19,7 +20,8 @@ export default function decryptStream(inputStream: stream.Readable, decryptionKe
//If end has been reached, stop //If end has been reached, stop
this.push(null); this.push(null);
} else { } else {
const decryptedChunk = decryptChunk(encryptedChunk, decryptionKeys); const { decryptedChunk, keys } = decryptChunk(encryptedChunk, [key0, key1, key2]);
[key0, key1, key2] = keys;
this.push(decryptedChunk); this.push(decryptedChunk);
} }
}, },