Added 'Decimal' option for toggleStrings. Closes #337.

This commit is contained in:
n1474335 2018-08-19 22:50:49 +01:00
parent c1b2fc9400
commit affe057cab
10 changed files with 51 additions and 21 deletions

View file

@ -8,6 +8,7 @@ import utf8 from "utf8";
import moment from "moment-timezone"; import moment from "moment-timezone";
import {fromBase64} from "./lib/Base64"; import {fromBase64} from "./lib/Base64";
import {fromHex} from "./lib/Hex"; import {fromHex} from "./lib/Hex";
import {fromDecimal} from "./lib/Decimal";
/** /**
@ -297,7 +298,7 @@ class Utils {
* Accepts hex, Base64, UTF8 and Latin1 strings. * Accepts hex, Base64, UTF8 and Latin1 strings.
* *
* @param {string} str * @param {string} str
* @param {string} type - One of "Hex", "Base64", "UTF8" or "Latin1" * @param {string} type - One of "Hex", "Decimal", "Base64", "UTF8" or "Latin1"
* @returns {byteArray} * @returns {byteArray}
* *
* @example * @example
@ -314,6 +315,8 @@ class Utils {
switch (type.toLowerCase()) { switch (type.toLowerCase()) {
case "hex": case "hex":
return fromHex(str); return fromHex(str);
case "decimal":
return fromDecimal(str);
case "base64": case "base64":
return fromBase64(str, null, "byteArray"); return fromBase64(str, null, "byteArray");
case "utf8": case "utf8":

37
src/core/lib/Decimal.mjs Normal file
View file

@ -0,0 +1,37 @@
/**
* Decimal functions.
*
* @author n1474335 [n1474335@gmail.com]
* @copyright Crown Copyright 2018
* @license Apache-2.0
*/
import Utils from "../Utils";
/**
* Convert a string of decimal values into a byte array.
*
* @param {string} data
* @param {string} [delim]
* @returns {byteArray}
*
* @example
* // returns [10,20,30]
* fromDecimal("10 20 30");
*
* // returns [10,20,30]
* fromDecimal("10:20:30", "Colon");
*/
export function fromDecimal(data, delim="Auto") {
delim = Utils.charRep(delim);
const output = [];
let byteStr = data.split(delim);
if (byteStr[byteStr.length-1] === "")
byteStr = byteStr.slice(0, byteStr.length-1);
for (let i = 0; i < byteStr.length; i++) {
output[i] = parseInt(byteStr[i], 10);
}
return output;
}

View file

@ -1,5 +1,5 @@
/** /**
* Byte representation functions. * Hexadecimal functions.
* *
* @author n1474335 [n1474335@gmail.com] * @author n1474335 [n1474335@gmail.com]
* @copyright Crown Copyright 2016 * @copyright Crown Copyright 2016
@ -83,8 +83,7 @@ export function toHexFast(data) {
* // returns [10,20,30] * // returns [10,20,30]
* fromHex("0a:14:1e", "Colon"); * fromHex("0a:14:1e", "Colon");
*/ */
export function fromHex(data, delim, byteLen=2) { export function fromHex(data, delim="Auto", byteLen=2) {
delim = delim || "Auto";
if (delim !== "None") { if (delim !== "None") {
const delimRegex = delim === "Auto" ? /[^a-f\d]/gi : Utils.regexRep(delim); const delimRegex = delim === "Auto" ? /[^a-f\d]/gi : Utils.regexRep(delim);
data = data.replace(delimRegex, ""); data = data.replace(delimRegex, "");

View file

@ -29,7 +29,7 @@ class ADD extends Operation {
"name": "Key", "name": "Key",
"type": "toggleString", "type": "toggleString",
"value": "", "value": "",
"toggleValues": ["Hex", "Base64", "UTF8", "Latin1"] "toggleValues": ["Hex", "Decimal", "Base64", "UTF8", "Latin1"]
} }
]; ];
} }

View file

@ -29,7 +29,7 @@ class AND extends Operation {
"name": "Key", "name": "Key",
"type": "toggleString", "type": "toggleString",
"value": "", "value": "",
"toggleValues": ["Hex", "Base64", "UTF8", "Latin1"] "toggleValues": ["Hex", "Decimal", "Base64", "UTF8", "Latin1"]
} }
]; ];
} }

View file

@ -5,8 +5,8 @@
*/ */
import Operation from "../Operation"; import Operation from "../Operation";
import Utils from "../Utils";
import {DELIM_OPTIONS} from "../lib/Delim"; import {DELIM_OPTIONS} from "../lib/Delim";
import {fromDecimal} from "../lib/Decimal";
/** /**
* From Decimal operation * From Decimal operation
@ -71,16 +71,7 @@ class FromDecimal extends Operation {
* @returns {byteArray} * @returns {byteArray}
*/ */
run(input, args) { run(input, args) {
const delim = Utils.charRep(args[0]), return fromDecimal(input, args[0]);
output = [];
let byteStr = input.split(delim);
if (byteStr[byteStr.length-1] === "")
byteStr = byteStr.slice(0, byteStr.length-1);
for (let i = 0; i < byteStr.length; i++) {
output[i] = parseInt(byteStr[i], 10);
}
return output;
} }
} }

View file

@ -86,7 +86,7 @@ class FromHex extends Operation {
* @returns {byteArray} * @returns {byteArray}
*/ */
run(input, args) { run(input, args) {
const delim = args[0] || "Space"; const delim = args[0] || "Auto";
return fromHex(input, delim, 2); return fromHex(input, delim, 2);
} }

View file

@ -29,7 +29,7 @@ class OR extends Operation {
"name": "Key", "name": "Key",
"type": "toggleString", "type": "toggleString",
"value": "", "value": "",
"toggleValues": ["Hex", "Base64", "UTF8", "Latin1"] "toggleValues": ["Hex", "Decimal", "Base64", "UTF8", "Latin1"]
} }
]; ];
} }

View file

@ -29,7 +29,7 @@ class SUB extends Operation {
"name": "Key", "name": "Key",
"type": "toggleString", "type": "toggleString",
"value": "", "value": "",
"toggleValues": ["Hex", "Base64", "UTF8", "Latin1"] "toggleValues": ["Hex", "Decimal", "Base64", "UTF8", "Latin1"]
} }
]; ];
} }

View file

@ -29,7 +29,7 @@ class XOR extends Operation {
"name": "Key", "name": "Key",
"type": "toggleString", "type": "toggleString",
"value": "", "value": "",
"toggleValues": ["Hex", "Base64", "UTF8", "Latin1"] "toggleValues": ["Hex", "Decimal", "Base64", "UTF8", "Latin1"]
}, },
{ {
"name": "Scheme", "name": "Scheme",