Explorar o código

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

n1474335 %!s(int64=7) %!d(string=hai) anos
pai
achega
affe057cab

+ 4 - 1
src/core/Utils.mjs

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

+ 37 - 0
src/core/lib/Decimal.mjs

@@ -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;
+}

+ 2 - 3
src/core/lib/Hex.mjs

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

+ 1 - 1
src/core/operations/ADD.mjs

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

+ 1 - 1
src/core/operations/AND.mjs

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

+ 2 - 11
src/core/operations/FromDecimal.mjs

@@ -5,8 +5,8 @@
  */
 
 import Operation from "../Operation";
-import Utils from "../Utils";
 import {DELIM_OPTIONS} from "../lib/Delim";
+import {fromDecimal} from "../lib/Decimal";
 
 /**
  * From Decimal operation
@@ -71,16 +71,7 @@ class FromDecimal extends Operation {
      * @returns {byteArray}
      */
     run(input, args) {
-        const delim = Utils.charRep(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;
+        return fromDecimal(input, args[0]);
     }
 
 }

+ 1 - 1
src/core/operations/FromHex.mjs

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

+ 1 - 1
src/core/operations/OR.mjs

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

+ 1 - 1
src/core/operations/SUB.mjs

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

+ 1 - 1
src/core/operations/XOR.mjs

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