diff --git a/src/js/config/Categories.js b/src/js/config/Categories.js
index 3a84b0ef..397a4c56 100755
--- a/src/js/config/Categories.js
+++ b/src/js/config/Categories.js
@@ -35,6 +35,8 @@ var Categories = [
"From Decimal",
"To Binary",
"From Binary",
+ "To Octal",
+ "From Octal",
"To Base64",
"From Base64",
"Show Base64 offsets",
diff --git a/src/js/config/OperationConfig.js b/src/js/config/OperationConfig.js
index e8e3a881..153a48ee 100755
--- a/src/js/config/OperationConfig.js
+++ b/src/js/config/OperationConfig.js
@@ -392,7 +392,7 @@ var OperationConfig = {
]
},
"From Hex": {
- description: "Converts a hexadecimal byte string back into a its raw value.
e.g. ce 93 ce b5 ce b9 ce ac 20 cf 83 ce bf cf 85 0a
becomes the UTF-8 encoded string Γειά σου
",
+ description: "Converts a hexadecimal byte string back into its raw value.
e.g. ce 93 ce b5 ce b9 ce ac 20 cf 83 ce bf cf 85 0a
becomes the UTF-8 encoded string Γειά σου
",
run: ByteRepr.runFromHex,
highlight: ByteRepr.highlightFrom,
highlightReverse: ByteRepr.highlightTo,
@@ -421,6 +421,36 @@ var OperationConfig = {
}
]
},
+ "From Octal": {
+ description: "Converts a octal byte string back into its raw value.
e.g. 316 223 316 265 316 271 316 254 40 317 203 316 277 317 205
becomes the UTF-8 encoded string Γειά σου
",
+ run: ByteRepr.runFromOct,
+ highlight: false,
+ highlightReverse: false,
+ inputType: "string",
+ outputType: "byteArray",
+ args: [
+ {
+ name: "Delimiter",
+ type: "option",
+ value: ByteRepr.OCT_DELIM_OPTIONS
+ }
+ ]
+ },
+ "To Octal": {
+ description: "Converts the input string to octal bytes separated by the specified delimiter.
e.g. The UTF-8 encoded string Γειά σου
becomes 316 223 316 265 316 271 316 254 40 317 203 316 277 317 205
",
+ run: ByteRepr.runToOct,
+ highlight: false,
+ highlightReverse: false,
+ inputType: "byteArray",
+ outputType: "string",
+ args: [
+ {
+ name: "Delimiter",
+ type: "option",
+ value: ByteRepr.OCT_DELIM_OPTIONS
+ }
+ ]
+ },
"From Charcode": {
description: "Converts unicode character codes back into text.
e.g. 0393 03b5 03b9 03ac 20 03c3 03bf 03c5
becomes Γειά σου
",
run: ByteRepr.runFromCharcode,
diff --git a/src/js/core/Utils.js b/src/js/core/Utils.js
index 9ef0b2b1..23e6221f 100755
--- a/src/js/core/Utils.js
+++ b/src/js/core/Utils.js
@@ -828,6 +828,38 @@ var Utils = {
},
+ /**
+ * Convert an byte array into a octal string
+ *
+ * @author Matt C [matt@artemisbot.pw]
+ * @param {byteArray} data
+ * @param {string} [delim]
+ * @returns {string}
+ *
+ */
+ toOct: function(data, delim) {
+ var output = "";
+ delim = delim || "Space";
+ data.map(val => output += (parseInt(Utils.bin(val), 2).toString(8) + delim));
+ return output.slice(0, -delim.length);
+ },
+
+
+ /**
+ * Convert an Octal string into a byte array.
+ *
+ * @author Matt C [matt@artemisbot.pw]
+ * @param {string} data
+ * @param {string} [delim]
+ * @returns {byteArray}
+ *
+ */
+ fromOct: function(data, delim) {
+ delim = delim || "Space";
+ return data.split(delim).map(val => parseInt(val, 8));
+ },
+
+
/**
* Parses CSV data and returns it as a two dimensional array or strings.
*
diff --git a/src/js/operations/ByteRepr.js b/src/js/operations/ByteRepr.js
index 2130409d..5a1fdb93 100755
--- a/src/js/operations/ByteRepr.js
+++ b/src/js/operations/ByteRepr.js
@@ -21,6 +21,11 @@ var ByteRepr = {
* @default
*/
HEX_DELIM_OPTIONS: ["Space", "Comma", "Semi-colon", "Colon", "Line feed", "CRLF", "0x", "\\x", "None"],
+ /**
+ * @constant
+ * @default
+ */
+ OCT_DELIM_OPTIONS: ["Space", "Comma", "Semi-colon", "Colon", "Line feed", "CRLF"],
/**
* @constant
* @default
@@ -53,6 +58,32 @@ var ByteRepr = {
},
+ /**
+ * To Oct operation.
+ *
+ * @author Matt C [matt@artemisbot.pw]
+ * @param {byteArray} input
+ * @param {Object[]} args
+ * @returns {string}
+ */
+ runToOct: function(input, args) {
+ var delim = Utils.charRep[args[0] || "Space"];
+ return Utils.toOct(input, delim, 2);
+ },
+
+ /**
+ * From Oct operation.
+ *
+ * @author Matt C [matt@artemisbot.pw]
+ * @param {string} input
+ * @param {Object[]} args
+ * @returns {byteArray}
+ */
+ runFromOct: function(input, args) {
+ var delim = Utils.charRep[args[0] || "Space"];
+ return Utils.fromOct(input, delim);
+ },
+
/**
* @constant
* @default