mirror of
https://github.com/gchq/CyberChef.git
synced 2025-04-20 23:06:16 -04:00
ESM: Ported CharEnc operations
This commit is contained in:
parent
a7d763287e
commit
b8d3b33963
3 changed files with 171 additions and 0 deletions
58
src/core/lib/ChrEnc.mjs
Normal file
58
src/core/lib/ChrEnc.mjs
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
/**
|
||||||
|
* Character encoding resources.
|
||||||
|
*
|
||||||
|
* @author n1474335 [n1474335@gmail.com]
|
||||||
|
* @copyright Crown Copyright 2016
|
||||||
|
* @license Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Character encoding format mappings.
|
||||||
|
*/
|
||||||
|
export const IO_FORMAT = {
|
||||||
|
"UTF-8 (65001)": 65001,
|
||||||
|
"UTF-7 (65000)": 65000,
|
||||||
|
"UTF16LE (1200)": 1200,
|
||||||
|
"UTF16BE (1201)": 1201,
|
||||||
|
"UTF16 (1201)": 1201,
|
||||||
|
"IBM EBCDIC International (500)": 500,
|
||||||
|
"IBM EBCDIC US-Canada (37)": 37,
|
||||||
|
"Windows-874 Thai (874)": 874,
|
||||||
|
"Japanese Shift-JIS (932)": 932,
|
||||||
|
"Simplified Chinese GBK (936)": 936,
|
||||||
|
"Korean (949)": 949,
|
||||||
|
"Traditional Chinese Big5 (950)": 950,
|
||||||
|
"Windows-1250 Central European (1250)": 1250,
|
||||||
|
"Windows-1251 Cyrillic (1251)": 1251,
|
||||||
|
"Windows-1252 Latin (1252)": 1252,
|
||||||
|
"Windows-1253 Greek (1253)": 1253,
|
||||||
|
"Windows-1254 Turkish (1254)": 1254,
|
||||||
|
"Windows-1255 Hebrew (1255)": 1255,
|
||||||
|
"Windows-1256 Arabic (1256)": 1256,
|
||||||
|
"Windows-1257 Baltic (1257)": 1257,
|
||||||
|
"Windows-1258 Vietnam (1258)": 1258,
|
||||||
|
"US-ASCII (20127)": 20127,
|
||||||
|
"Simplified Chinese GB2312 (20936)": 20936,
|
||||||
|
"KOI8-R Russian Cyrillic (20866)": 20866,
|
||||||
|
"KOI8-U Ukrainian Cyrillic (21866)": 21866,
|
||||||
|
"ISO-8859-1 Latin 1 Western European (28591)": 28591,
|
||||||
|
"ISO-8859-2 Latin 2 Central European (28592)": 28592,
|
||||||
|
"ISO-8859-3 Latin 3 South European (28593)": 28593,
|
||||||
|
"ISO-8859-4 Latin 4 North European (28594)": 28594,
|
||||||
|
"ISO-8859-5 Latin/Cyrillic (28595)": 28595,
|
||||||
|
"ISO-8859-6 Latin/Arabic (28596)": 28596,
|
||||||
|
"ISO-8859-7 Latin/Greek (28597)": 28597,
|
||||||
|
"ISO-8859-8 Latin/Hebrew (28598)": 28598,
|
||||||
|
"ISO-8859-9 Latin 5 Turkish (28599)": 28599,
|
||||||
|
"ISO-8859-10 Latin 6 Nordic (28600)": 28600,
|
||||||
|
"ISO-8859-11 Latin/Thai (28601)": 28601,
|
||||||
|
"ISO-8859-13 Latin 7 Baltic Rim (28603)": 28603,
|
||||||
|
"ISO-8859-14 Latin 8 Celtic (28604)": 28604,
|
||||||
|
"ISO-8859-15 Latin 9 (28605)": 28605,
|
||||||
|
"ISO-8859-16 Latin 10 (28606)": 28606,
|
||||||
|
"ISO-2022 JIS Japanese (50222)": 50222,
|
||||||
|
"EUC Japanese (51932)": 51932,
|
||||||
|
"EUC Korean (51949)": 51949,
|
||||||
|
"Simplified Chinese GB18030 (54936)": 54936,
|
||||||
|
};
|
||||||
|
|
55
src/core/operations/DecodeText.mjs
Normal file
55
src/core/operations/DecodeText.mjs
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
/**
|
||||||
|
* @author n1474335 [n1474335@gmail.com]
|
||||||
|
* @copyright Crown Copyright 2016
|
||||||
|
* @license Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Operation from "../Operation";
|
||||||
|
import cptable from "../vendor/js-codepage/cptable.js";
|
||||||
|
import {IO_FORMAT} from "../lib/ChrEnc";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Decode text operation
|
||||||
|
*/
|
||||||
|
class DecodeText extends Operation {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DecodeText constructor
|
||||||
|
*/
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.name = "Decode text";
|
||||||
|
this.module = "CharEnc";
|
||||||
|
this.description = [
|
||||||
|
"Decodes text from the chosen character encoding.",
|
||||||
|
"<br><br>",
|
||||||
|
"Supported charsets are:",
|
||||||
|
"<ul>",
|
||||||
|
Object.keys(IO_FORMAT).map(e => `<li>${e}</li>`).join("\n"),
|
||||||
|
"</ul>",
|
||||||
|
].join("\n");
|
||||||
|
this.inputType = "byteArray";
|
||||||
|
this.outputType = "string";
|
||||||
|
this.args = [
|
||||||
|
{
|
||||||
|
"name": "Encoding",
|
||||||
|
"type": "option",
|
||||||
|
"value": Object.keys(IO_FORMAT)
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {byteArray} input
|
||||||
|
* @param {Object[]} args
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
run(input, args) {
|
||||||
|
const format = IO_FORMAT[args[0]];
|
||||||
|
return cptable.utils.decode(format, input);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default DecodeText;
|
58
src/core/operations/EncodeText.mjs
Normal file
58
src/core/operations/EncodeText.mjs
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
/**
|
||||||
|
* @author n1474335 [n1474335@gmail.com]
|
||||||
|
* @copyright Crown Copyright 2016
|
||||||
|
* @license Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Operation from "../Operation";
|
||||||
|
import cptable from "../vendor/js-codepage/cptable.js";
|
||||||
|
import {IO_FORMAT} from "../lib/ChrEnc";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encode text operation
|
||||||
|
*/
|
||||||
|
class EncodeText extends Operation {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EncodeText constructor
|
||||||
|
*/
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.name = "Encode text";
|
||||||
|
this.module = "CharEnc";
|
||||||
|
this.description = [
|
||||||
|
"Encodes text into the chosen character encoding.",
|
||||||
|
"<br><br>",
|
||||||
|
"Supported charsets are:",
|
||||||
|
"<ul>",
|
||||||
|
Object.keys(IO_FORMAT).map(e => `<li>${e}</li>`).join("\n"),
|
||||||
|
"</ul>",
|
||||||
|
].join("\n");
|
||||||
|
this.inputType = "string";
|
||||||
|
this.outputType = "byteArray";
|
||||||
|
this.args = [
|
||||||
|
{
|
||||||
|
"name": "Encoding",
|
||||||
|
"type": "option",
|
||||||
|
"value": Object.keys(IO_FORMAT)
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} input
|
||||||
|
* @param {Object[]} args
|
||||||
|
* @returns {byteArray}
|
||||||
|
*/
|
||||||
|
run(input, args) {
|
||||||
|
const format = IO_FORMAT[args[0]];
|
||||||
|
let encoded = cptable.utils.encode(format, input);
|
||||||
|
encoded = Array.from(encoded);
|
||||||
|
return encoded;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export default EncodeText;
|
Loading…
Add table
Add a link
Reference in a new issue