UNPKG

router-toolkit

Version:

A npm module for managing routers and access points

120 lines (119 loc) 3.82 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.toQS = exports.encodeKey = exports.asyEncode = exports.encodePassword = exports.decodePassword = exports.randomNum = exports.hex2a = void 0; const crypto_js_1 = __importDefault(require("crypto-js")); const rsa_1 = __importDefault(require("./rsa")); /** * Converts Hex to String. * * @param hex - The hex string to convert * @returns True UTF-8 converted string */ function hex2a(hex) { const buf = Buffer.from(hex, 'hex'); return buf.toString('utf-8'); } exports.hex2a = hex2a; /** * Generates a random string of numbers. * * @param n - The length of the string * @returns The random string */ function randomNum(n) { let t = ''; for (let i = 0; i < n; i++) { t += Math.floor(Math.random() * 10); } return t; } exports.randomNum = randomNum; /** * Decodes a SSID password. * * @param src - The encrypted password * @param key - The decryption key * @returns The decrypted password */ function decodePassword(src, key) { const iv = key.split('').reverse().join(''); if (src === '') { return ''; } const bkey = crypto_js_1.default.SHA256(key); const biv = crypto_js_1.default.SHA256(iv); const decrypted = crypto_js_1.default.AES.decrypt(src, bkey, { iv: biv, mode: crypto_js_1.default.mode.CBC, padding: crypto_js_1.default.pad.ZeroPadding, }); return decrypted.toString(crypto_js_1.default.enc.Utf8); } exports.decodePassword = decodePassword; /** * Encodes a string with AES256. * * @param src - The string to be encrypted * @param key - The encryption key * @param iv - The IV to use * @returns The encrypted password */ function encodePassword(src, key, iv) { if (src.length > 0) { const bKey = crypto_js_1.default.SHA256(key); const bIv = crypto_js_1.default.SHA256(iv); const encrypted = crypto_js_1.default.AES.encrypt(src, bKey, { iv: bIv, mode: crypto_js_1.default.mode.CBC, padding: crypto_js_1.default.pad.ZeroPadding, }); const dst = encrypted.toString(); if (dst !== '' && dst !== 'failed') { return dst; } } return src; } exports.encodePassword = encodePassword; /** * Encodes the string with RSA. * * @param src - The string to be encrypted * @returns The encrypted string */ function asyEncode(src) { return (0, rsa_1.default)(Object.assign({ key: '-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAodPTerkUVCYmv28SOfRV\n7UKHVujx/HjCUTAWy9l0L5H0JV0LfDudTdMNPEKloZsNam3YrtEnq6jqMLJV4ASb\n1d6axmIgJ636wyTUS99gj4BKs6bQSTUSE8h/QkUYv4gEIt3saMS0pZpd90y6+B/9\nhZxZE/RKU8e+zgRqp1/762TB7vcjtjOwXRDEL0w71Jk9i8VUQ59MR1Uj5E8X3WIc\nfYSK5RWBkMhfaTRM6ozS9Bqhi40xlSOb3GBxCmliCifOJNLoO9kFoWgAIw5hkSIb\nGH+4Csop9Uy8VvmmB+B3ubFLN35qIa5OG5+SDXn4L7FeAA5lRiGxRi8tsWrtew8w\nnwIDAQAB\n-----END PUBLIC KEY-----', padding: 1, }), Buffer.from(src), false).toString('base64'); } exports.asyEncode = asyEncode; /** * Encodes public and private keys. * * @param key - The encryption key * @param iv - The IV to encrypt * @returns The encrypted keys */ function encodeKey(key, iv) { return asyEncode(key + '+' + iv); } exports.encodeKey = encodeKey; /** * Parse and object to query string. * * @param obj - The object to be parsed * @returns The result query string */ function toQS(obj) { const str = []; for (const p in obj) if (obj.hasOwnProperty(p)) { str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p])); } return str.join('&'); } exports.toQS = toQS;