SplatNet-Backend/services/decrypt.js

44 lines
1.3 KiB
JavaScript
Raw Normal View History

2026-02-19 06:08:41 +01:00
const fs = require('node:fs');
const path = require('node:path');
const crypto = require('node:crypto');
const BOSS_AES_KEY = process.env.BOSS_AES_KEY;
const BOSS_HMAC_KEY = process.env.BOSS_HMAC_KEY;
async function run() {
try {
if (!BOSS_AES_KEY || !BOSS_HMAC_KEY) {
process.stderr.write("decrypt: missing environment keys\n");
process.exit(1);
}
const data = fs.readFileSync(process.argv[2]);
const IV = Buffer.concat([
data.subarray(0x0C, 0x18),
Buffer.from([0x00, 0x00, 0x00, 0x01])
]);
const decipher = crypto.createDecipheriv('aes-128-ctr', Buffer.from(BOSS_AES_KEY, 'hex'), IV);
const decrypted = Buffer.concat([decipher.update(data.subarray(0x20)), decipher.final()]);
const hmac = decrypted.subarray(0, 0x20);
const content = decrypted.subarray(0x20);
const calculatedHmac = crypto.createHmac('sha256', Buffer.from(BOSS_HMAC_KEY, 'hex'))
.update(content)
.digest();
if (!calculatedHmac.equals(hmac)) {
process.stderr.write("Console HMAC check failed. Is the key correct?\n");
process.exit(1);
}
process.stdout.write(content);
} catch (err) {
process.stderr.write(`decrypt.js: ${err.message}\n`);
process.exit(1);
}
}
run();