vodafone-station-cli
Version:
Access your Vodafone Station from the comfort of the command line.
39 lines (38 loc) • 1.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.prepareParameters = prepareParameters;
exports.deriveKey = deriveKey;
exports.deriveKeyTechnicolor = deriveKeyTechnicolor;
exports.encrypt = encrypt;
exports.decrypt = decrypt;
const tslib_1 = require("tslib");
/* eslint-disable new-cap */
const sjcl_1 = tslib_1.__importDefault(require("sjcl"));
const SJCL_ITERATIONS = 1000;
const SJCL_KEYSIZEBITS = 128;
const SJCL_TAGLENGTH = 128;
function prepareParameters(derivedKey, ivHex, authData) {
return {
authData: sjcl_1.default.codec.utf8String.toBits(authData),
iv: sjcl_1.default.codec.hex.toBits(ivHex),
prf: new sjcl_1.default.cipher.aes(sjcl_1.default.codec.hex.toBits(derivedKey)),
};
}
function deriveKey(password, salt) {
const derivedKeyBits = sjcl_1.default.misc.pbkdf2(password, sjcl_1.default.codec.hex.toBits(salt), SJCL_ITERATIONS, SJCL_KEYSIZEBITS);
return sjcl_1.default.codec.hex.fromBits(derivedKeyBits);
}
function deriveKeyTechnicolor(password, salt) {
const derivedKeyBits = sjcl_1.default.misc.pbkdf2(password, salt, SJCL_ITERATIONS, SJCL_KEYSIZEBITS);
return sjcl_1.default.codec.hex.fromBits(derivedKeyBits);
}
function encrypt(derivedKey, plainText, ivHex, authData) {
const bitParams = prepareParameters(derivedKey, ivHex, authData);
const encryptedBits = sjcl_1.default.mode.ccm.encrypt(bitParams.prf, sjcl_1.default.codec.utf8String.toBits(plainText), bitParams.iv, bitParams.authData, SJCL_TAGLENGTH);
return sjcl_1.default.codec.hex.fromBits(encryptedBits);
}
function decrypt(derivedKey, cipherTextHex, ivHex, authData) {
const bitParams = prepareParameters(derivedKey, ivHex, authData);
const decryptedBits = sjcl_1.default.mode.ccm.decrypt(bitParams.prf, sjcl_1.default.codec.hex.toBits(cipherTextHex), bitParams.iv, bitParams.authData, SJCL_TAGLENGTH);
return sjcl_1.default.codec.utf8String.fromBits(decryptedBits);
}