diff --git a/CHANGELOG.md b/CHANGELOG.md index a65fc145..15943e7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Changelog All major and minor version changes will be documented in this file. Details of patch-level version changes can be found in [commit messages](https://github.com/gchq/CyberChef/commits/master). + +### [8.14.0] - 2018-12-18 +- 'To Base62' and 'From Base62' operations added [@tcode2k16] | [#443] + ### [8.13.0] - 2018-12-15 - 'A1Z26 Cipher Encode' and 'A1Z26 Cipher Decode' operations added [@jarmovanlenthe] | [#441] @@ -69,6 +73,7 @@ All major and minor version changes will be documented in this file. Details of +[8.14.0]: https://github.com/gchq/CyberChef/releases/tag/v8.14.0 [8.13.0]: https://github.com/gchq/CyberChef/releases/tag/v8.13.0 [8.12.0]: https://github.com/gchq/CyberChef/releases/tag/v8.12.0 [8.11.0]: https://github.com/gchq/CyberChef/releases/tag/v8.11.0 @@ -101,6 +106,7 @@ All major and minor version changes will be documented in this file. Details of [@klaxon1]: https://github.com/klaxon1 [@bwhitn]: https://github.com/bwhitn [@jarmovanlenthe]: https://github.com/jarmovanlenthe +[@tcode2k16]: https://github.com/tcode2k16 [#95]: https://github.com/gchq/CyberChef/pull/299 [#173]: https://github.com/gchq/CyberChef/pull/173 @@ -125,3 +131,4 @@ All major and minor version changes will be documented in this file. Details of [#394]: https://github.com/gchq/CyberChef/pull/394 [#428]: https://github.com/gchq/CyberChef/pull/428 [#441]: https://github.com/gchq/CyberChef/pull/441 +[#443]: https://github.com/gchq/CyberChef/pull/443 diff --git a/src/core/config/Categories.json b/src/core/config/Categories.json index 0a3a5f6e..d4e815ac 100755 --- a/src/core/config/Categories.json +++ b/src/core/config/Categories.json @@ -18,8 +18,6 @@ "From Binary", "To Octal", "From Octal", - "To Base62", - "From Base62", "To Base64", "From Base64", "Show Base64 offsets", @@ -27,6 +25,8 @@ "From Base32", "To Base58", "From Base58", + "To Base62", + "From Base62", "To Base85", "From Base85", "To Base", diff --git a/src/core/operations/FromBase62.mjs b/src/core/operations/FromBase62.mjs index 5d56b3b7..525f2e2f 100644 --- a/src/core/operations/FromBase62.mjs +++ b/src/core/operations/FromBase62.mjs @@ -22,21 +22,27 @@ class FromBase62 extends Operation { this.name = "From Base62"; this.module = "Default"; - this.description = "decode base62 string"; - this.infoURL = "https://en.wikipedia.org/wiki/List_of_numeral_systems"; + this.description = "Base62 is a notation for encoding arbitrary byte data using a restricted set of symbols that can be conveniently used by humans and processed by computers. The high number base results in shorter strings than with the decimal or hexadecimal system."; + this.infoURL = "https://wikipedia.org/wiki/List_of_numeral_systems"; this.inputType = "string"; - this.outputType = "string"; - this.args = []; + this.outputType = "byteArray"; + this.args = [ + { + name: "Alphabet", + type: "string", + value: "0-9A-Za-z" + } + ]; } /** * @param {string} input * @param {Object[]} args - * @returns {string} + * @returns {byteArray} */ run(input, args) { - if (input.length < 1) return ""; - const ALPHABET = Utils.expandAlphRange("0-9A-Za-z").join(""); + if (input.length < 1) return []; + const ALPHABET = Utils.expandAlphRange(args[0]).join(""); const BN = BigNumber.clone({ ALPHABET }); const re = new RegExp("[^" + ALPHABET.replace(/[[\]\\\-^$]/g, "\\$&") + "]", "g"); @@ -44,7 +50,7 @@ class FromBase62 extends Operation { const number = new BN(input, 62); - return Utils.byteArrayToUtf8(Utils.convertToByteArray(number.toString(16), "Hex")); + return Utils.convertToByteArray(number.toString(16), "Hex"); } } diff --git a/src/core/operations/ToBase62.mjs b/src/core/operations/ToBase62.mjs index a52679ef..3f615db2 100644 --- a/src/core/operations/ToBase62.mjs +++ b/src/core/operations/ToBase62.mjs @@ -22,11 +22,17 @@ class ToBase62 extends Operation { this.name = "To Base62"; this.module = "Default"; - this.description = "encode string to base62"; + this.description = "Base62 is a notation for encoding arbitrary byte data using a restricted set of symbols that can be conveniently used by humans and processed by computers. The high number base results in shorter strings than with the decimal or hexadecimal system."; this.infoURL = "https://en.wikipedia.org/wiki/List_of_numeral_systems"; - this.inputType = "string"; + this.inputType = "byteArray"; this.outputType = "string"; - this.args = []; + this.args = [ + { + name: "Alphabet", + type: "string", + value: "0-9A-Za-z" + } + ]; } /** @@ -37,12 +43,10 @@ class ToBase62 extends Operation { run(input, args) { if (input.length < 1) return ""; - const ALPHABET = Utils.expandAlphRange("0-9A-Za-z").join(""); + const ALPHABET = Utils.expandAlphRange(args[0]).join(""); const BN = BigNumber.clone({ ALPHABET }); - input = Utils.strToByteArray(input); - input = toHexFast(input); - input = input.toUpperCase(); + input = toHexFast(input).toUpperCase(); const number = new BN(input, 16); diff --git a/test/tests/operations/Base62.mjs b/test/tests/operations/Base62.mjs index e96e4e46..8bf41b36 100644 --- a/test/tests/operations/Base62.mjs +++ b/test/tests/operations/Base62.mjs @@ -17,7 +17,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "To Base62", - args: [], + args: ["0-9A-Za-z"], }, ], }, @@ -28,7 +28,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "To Base62", - args: [], + args: ["0-9A-Za-z"], }, ], }, @@ -39,7 +39,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "To Base62", - args: [], + args: ["0-9A-Za-z"], }, ], }, @@ -50,7 +50,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "From Base62", - args: [], + args: ["0-9A-Za-z"], }, ], }, @@ -61,7 +61,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "From Base62", - args: [], + args: ["0-9A-Za-z"], }, ], }, @@ -72,7 +72,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "From Base62", - args: [], + args: ["0-9A-Za-z"], }, ], }