UNPKG

fca-mtx-uzair

Version:
184 lines (169 loc) 6.09 kB
'use strict'; // Made by Uzair Rajput Mtx const fs = require('fs-extra'); const utils = require('../../../utils'); const logger = require('../../../logger'); const Step_3 = require('./Step_3'); const Database = require("../../Database"); const Already_Action = { First: 0, Encode: { Status: false, Data: Array }, Decode: { Status: false, Data: Array } }; var ArrPassWord; if (!fs.existsSync(process.cwd() + '/Uzair_Database') || !fs.existsSync(process.cwd() + '/Uzair_Database/RandPass.json')) { const crypto = require('crypto'); ArrPassWord = Array.from({ length: 101 }, (_, i) => crypto.randomBytes(5).toString('hex')); if (Database().has('Security')) { Database().delete('Security'); } if (!fs.existsSync(process.cwd() + '/Uzair_Database')) { fs.mkdirSync(process.cwd() + '/Uzair_Database'); } fs.writeFileSync(process.cwd() + '/Uzair_Database/RandPass.json', JSON.stringify(ArrPassWord, null, 2), 'utf8'); } else { ArrPassWord = JSON.parse(fs.readFileSync(process.cwd() + '/Uzair_Database/RandPass.json')); } function CreateFakeType2(length) { var result = ''; var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/+0123456789'; for (var i = 0; i < length; i++) result += characters.charAt(Math.floor(Math.random() * characters.length)); return result; } function Between(min, max) { return parseInt(Math.random() * (max - min) + min); } function CreateSecurity() { var Security = Between(0, 90); var Secret = Between(10, 33); return { Security: Security, Previous: parseInt(Security) - Secret, Secret: Secret, Number: Between(10, 50) }; } function CheckAndParse(DefaultPassWord) { var PassWord = new Array(); if (!DefaultPassWord) return logger.Warning(" [Uzair Rajput ] DefaultPassWord is required.", function () { process.exit(0); }); try { if (!Database().has('Security')) { let Obj = CreateSecurity(); Database().set('Security', JSON.stringify(Obj)); for (let i = 1; i < 10; i++) PassWord.push(ArrPassWord[parseInt(Obj.Security) + parseInt(i)]); return { PassWord: DefaultPassWord + "-" + PassWord.join('-'), Slot: Obj.Number, Security: Obj.Security, Previous: Obj.Previous, Secret: Obj.Secret }; } else { var Data = JSON.parse(Database().get('Security')); if (utils.getType(Data) === "Object") { if (!Data.Security || !Data.Previous || !Data.Secret || !Data.Number) { logger.Error('[ Uzair Rajput ] Data Deficit Detected, Resetting...'); let Obj = CreateSecurity(); Database().set('Security', JSON.stringify(Obj)); for (let i = 1; i < 10; i++) PassWord.push(ArrPassWord[parseInt(Obj.Security) + parseInt(i)]); return { PassWord: DefaultPassWord + "-" + PassWord.join('-'), Slot: Obj.Number, Security: Obj.Security, Previous: Obj.Previous, Secret: Obj.Secret }; } else { for (let i = 1; i < 10; i++) PassWord.push(ArrPassWord[parseInt(Data.Security) + parseInt(i)]); return { PassWord: DefaultPassWord + "-" + PassWord.join('-'), Slot: Data.Number, Security: Data.Security, Previous: Data.Previous, Secret: Data.Secret }; } } } } catch (e) { logger.Error("[ Uzair Rajput ] Error: " + e); let Obj = CreateSecurity(); Database().set('Security', JSON.stringify(Obj)); for (let i = 1; i < 10; i++) PassWord.push(ArrPassWord[parseInt(Obj.Security) + parseInt(i)]); return { PassWord: DefaultPassWord + "-" + PassWord.join('-'), Slot: Obj.Number, Security: Obj.Security, Previous: Obj.Previous, Secret: Obj.Secret }; } } function CreatePassWord(DefaultPassWord, ParseObj) { var PassWord = new Array(); for (let i = 1; i < 10; i++) PassWord.push(ArrPassWord[parseInt(ParseObj.Security) + parseInt(i)]); return DefaultPassWord + "-" + PassWord.join('-'); } const Encrypt = (AppState, PassWord) => { return require('./Step_3').encryptState( require('./Step_2').Encrypt( require('./Step_1').EncryptState(AppState, PassWord) ), PassWord ); }; const Decrypt = (AppState, Slot, PassWord) => { return require('./Step_1').DecryptState( require('./Step_2').Decrypt( require('./Step_3').decryptState(String(AppState[parseInt(Slot) - 10]), PassWord) ), PassWord ); }; module.exports = function (AppState, DefaultPass, Type) { switch (Type) { case "Encrypt": { var Data_Return; if (!Already_Action.Encode.Status) { if (Already_Action.First == 0) Already_Action.First = 1; const Obj = CreateSecurity(), PassWord = CreatePassWord(DefaultPass, Obj), AppState_Encrypt = Encrypt(AppState, PassWord); Database().set('Security', JSON.stringify(Obj, null, 2)); Data_Return = Array.from({ length: 60 }, (_, i) => { if (i === (parseInt(Obj.Number) - 10)) { return AppState_Encrypt; } else { return Step_3.encryptState(CreateFakeType2(AppState_Encrypt.length), PassWord).slice(0, AppState_Encrypt.length); } }); Already_Action.Encode.Status = true; Already_Action.Encode.Data = Data_Return; } else { Data_Return = Already_Action.Encode.Data; } return Data_Return; } case "Decrypt": { var AppState_Decrypt; if (!Already_Action.Decode.Status) { const Parse = CheckAndParse(DefaultPass); AppState_Decrypt = Decrypt(AppState, Parse.Slot, Parse.PassWord); if (Already_Action.First == 0) { Already_Action.Encode.Status = true; Already_Action.Encode.Data = AppState; } Already_Action.Decode.Status = true; Already_Action.Decode.Data = AppState_Decrypt; } else { AppState_Decrypt = Already_Action.Decode.Data; } return AppState_Decrypt; } } };