diff --git a/CHANGELOG.md b/CHANGELOG.md
index 15943e7e..6355831e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,9 @@
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.15.0] - 2018-12-18
+- 'Text Encoding Brute Force' operation added [@Cynser] | [#439]
+
### [8.14.0] - 2018-12-18
- 'To Base62' and 'From Base62' operations added [@tcode2k16] | [#443]
@@ -73,6 +76,7 @@ All major and minor version changes will be documented in this file. Details of
+[8.15.0]: https://github.com/gchq/CyberChef/releases/tag/v8.15.0
[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
@@ -107,6 +111,7 @@ All major and minor version changes will be documented in this file. Details of
[@bwhitn]: https://github.com/bwhitn
[@jarmovanlenthe]: https://github.com/jarmovanlenthe
[@tcode2k16]: https://github.com/tcode2k16
+[@Cynser]: https://github.com/Cynser
[#95]: https://github.com/gchq/CyberChef/pull/299
[#173]: https://github.com/gchq/CyberChef/pull/173
@@ -130,5 +135,6 @@ All major and minor version changes will be documented in this file. Details of
[#387]: https://github.com/gchq/CyberChef/pull/387
[#394]: https://github.com/gchq/CyberChef/pull/394
[#428]: https://github.com/gchq/CyberChef/pull/428
+[#439]: https://github.com/gchq/CyberChef/pull/439
[#441]: https://github.com/gchq/CyberChef/pull/441
[#443]: https://github.com/gchq/CyberChef/pull/443
diff --git a/babel.config.js b/babel.config.js
index 2362c42a..5459f6c8 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -1,7 +1,7 @@
module.exports = function(api) {
api.cache.forever();
- return {
+ return {
"presets": [
["@babel/preset-env", {
"targets": {
diff --git a/src/core/config/Categories.json b/src/core/config/Categories.json
index d4e815ac..3998d7db 100755
--- a/src/core/config/Categories.json
+++ b/src/core/config/Categories.json
@@ -51,6 +51,7 @@
"Change IP format",
"Encode text",
"Decode text",
+ "Text Encoding Brute Force",
"Swap endianness",
"To MessagePack",
"From MessagePack",
diff --git a/src/core/operations/TextEncodingBruteForce.mjs b/src/core/operations/TextEncodingBruteForce.mjs
new file mode 100644
index 00000000..3919dcd9
--- /dev/null
+++ b/src/core/operations/TextEncodingBruteForce.mjs
@@ -0,0 +1,92 @@
+/**
+ * @author Cynser
+ * @author n1474335 [n1474335@gmail.com]
+ * @copyright Crown Copyright 2018
+ * @license Apache-2.0
+ */
+
+import Operation from "../Operation";
+import Utils from "../Utils";
+import cptable from "../vendor/js-codepage/cptable.js";
+import {IO_FORMAT} from "../lib/ChrEnc";
+
+/**
+ * Text Encoding Brute Force operation
+ */
+class TextEncodingBruteForce extends Operation {
+
+ /**
+ * TextEncodingBruteForce constructor
+ */
+ constructor() {
+ super();
+
+ this.name = "Text Encoding Brute Force";
+ this.module = "CharEnc";
+ this.description = [
+ "Enumerates all supported text encodings for the input, allowing you to quickly spot the correct one.",
+ "
",
+ "Supported charsets are:",
+ "
Encoding | Value |
---|---|
${enc} | ${value} |