router-toolkit
Version:
A npm module for managing routers and access points
120 lines (119 loc) • 3.82 kB
JavaScript
"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;