mirror of
https://github.com/zoogie/TADpole-Online.git
synced 2025-06-18 10:45:35 -04:00
38 lines
1.2 KiB
JavaScript
38 lines
1.2 KiB
JavaScript
function buildDsiware(dsiwareData, len) {
|
|
let content = constants.dsiwareContent;
|
|
let data = [
|
|
dsiwareData.banner,
|
|
dsiwareData.header,
|
|
dsiwareData.footer,
|
|
];
|
|
content.forEach(c => {
|
|
if (dsiwareData.other.hasOwnProperty(c)) data.push(dsiwareData.other[c]);;
|
|
});
|
|
|
|
let offset = 0;
|
|
let dsiwareFinal = new Uint8Array(len);
|
|
for (let i = 0; i < data.length; i++) {
|
|
let d = data[i];
|
|
let metaData = metaGen(d, dsiwareData.keys.movableKeyY);
|
|
let iv = sliceArr(metaData, 0x10, 0x10);
|
|
let key = dsiwareData.keys.normalKey;
|
|
let encryptedData = new aesjs.ModeOfOperation.cbc(key, new Uint8Array(0x10)).encrypt(d);
|
|
dsiwareFinal.set(encryptedData, offset);
|
|
dsiwareFinal.set(metaData, offset + encryptedData.length);
|
|
offset += (encryptedData.length + metaData.length)
|
|
}
|
|
|
|
return dsiwareFinal;
|
|
}
|
|
|
|
function metaGen(data, movableKeyY) {
|
|
let dataHash = sha256.array(data);
|
|
let normalKeyCmac = extractNormalKey(movableKeyY, constants.keys.cmac);
|
|
let key = CryptoJS.enc.Hex.parse(byteArrToHexStr(normalKeyCmac));
|
|
let msg = CryptoJS.enc.Hex.parse(byteArrToHexStr(dataHash));
|
|
let enc = CryptoJS.CMAC(key, msg);
|
|
let metaData = new Uint8Array(0x20);
|
|
metaData.set(parseHexString(enc.toString()));
|
|
return metaData;
|
|
}
|