mirror of
https://github.com/gchq/CyberChef.git
synced 2025-05-09 07:45:00 -04:00
generalization: 'To Byte String Literal'. Python implemented. More to come...
This commit is contained in:
parent
9f8dd0f2a6
commit
ea7a9a90bb
3 changed files with 60 additions and 38 deletions
|
@ -6,24 +6,34 @@
|
||||||
|
|
||||||
import Operation from "../Operation";
|
import Operation from "../Operation";
|
||||||
|
|
||||||
|
const LANGUAGES = {
|
||||||
|
"Python": "python",
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* To Python bytes operation
|
* To Byte String Literal operation
|
||||||
*/
|
*/
|
||||||
class ToPythonBytes extends Operation {
|
class ToByteStringLiteral extends Operation {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ToPythonBytes constructor
|
* ToByteStringLiteral constructor
|
||||||
*/
|
*/
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
this.name = "To Python bytes";
|
this.name = "To Byte String Literal";
|
||||||
this.module = "Default";
|
this.module = "Default";
|
||||||
this.description = "Converts the input data to Python bytes literal.<br><br>e.g. The UTF-8 encoded string <code>ça ma couté 20€</code> becomes <code>b'\\xc3\\xa7a ma cout\\xc3\\xa9 20\\xe2\\x82\\xac'</code>";
|
this.description = "Converts the input data to byte string literal in common languages.<br><br>e.g. for python, the UTF-8 encoded string <code>ça ma couté 20€</code> becomes <code>b'\\xc3\\xa7a ma cout\\xc3\\xa9 20\\xe2\\x82\\xac'</code>";
|
||||||
this.infoURL = "https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals";
|
this.infoURL = "https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals";
|
||||||
this.inputType = "ArrayBuffer" ;
|
this.inputType = "ArrayBuffer" ;
|
||||||
this.outputType = "string";
|
this.outputType = "string";
|
||||||
this.args = [];
|
this.args = [
|
||||||
|
{
|
||||||
|
"name": "Language",
|
||||||
|
"type": "option",
|
||||||
|
"value": Object.keys(LANGUAGES)
|
||||||
|
},
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -33,6 +43,18 @@ class ToPythonBytes extends Operation {
|
||||||
*/
|
*/
|
||||||
run(input, args) {
|
run(input, args) {
|
||||||
const data = new Uint8Array(input);
|
const data = new Uint8Array(input);
|
||||||
|
const language = args[0];
|
||||||
|
if (language === "python") {
|
||||||
|
return this.python(data);
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Uint8Array} data
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
python(data) {
|
||||||
if (!data) return "b''";
|
if (!data) return "b''";
|
||||||
|
|
||||||
// First pass to decide which quote to use
|
// First pass to decide which quote to use
|
||||||
|
@ -81,4 +103,4 @@ class ToPythonBytes extends Operation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default ToPythonBytes;
|
export default ToByteStringLiteral;
|
|
@ -71,7 +71,7 @@ import "./tests/operations/SymmetricDifference";
|
||||||
import "./tests/operations/ToGeohash.mjs";
|
import "./tests/operations/ToGeohash.mjs";
|
||||||
import "./tests/operations/TranslateDateTimeFormat";
|
import "./tests/operations/TranslateDateTimeFormat";
|
||||||
import "./tests/operations/Magic";
|
import "./tests/operations/Magic";
|
||||||
import "./tests/operations/Literals";
|
import "./tests/operations/ByteStringLiteral";
|
||||||
|
|
||||||
let allTestsPassing = true;
|
let allTestsPassing = true;
|
||||||
const testStatusCounts = {
|
const testStatusCounts = {
|
||||||
|
|
|
@ -9,105 +9,105 @@ import TestRegister from "../../TestRegister";
|
||||||
|
|
||||||
TestRegister.addTests([
|
TestRegister.addTests([
|
||||||
{
|
{
|
||||||
name: "Literal: empty",
|
name: "Literal: python - empty",
|
||||||
input: "",
|
input: "",
|
||||||
expectedOutput: "b''",
|
expectedOutput: "b''",
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
"op": "To Python bytes",
|
"op": "To Byte String Literal",
|
||||||
"args": []
|
"args": ["python"]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Literal: single quote",
|
name: "Literal: python - single quote",
|
||||||
input: "'",
|
input: "'",
|
||||||
expectedOutput: "b\"'\"",
|
expectedOutput: "b\"'\"",
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
"op": "To Python bytes",
|
"op": "To Byte String Literal",
|
||||||
"args": []
|
"args": ["python"]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Literal: single quote and data",
|
name: "Literal: python - single quote and data",
|
||||||
input: "aaa'bbb",
|
input: "aaa'bbb",
|
||||||
expectedOutput: "b\"aaa'bbb\"",
|
expectedOutput: "b\"aaa'bbb\"",
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
"op": "To Python bytes",
|
"op": "To Byte String Literal",
|
||||||
"args": []
|
"args": ["python"]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Literal: double quote",
|
name: "Literal: python - double quote",
|
||||||
input: "\"",
|
input: "\"",
|
||||||
expectedOutput: "b'\"'",
|
expectedOutput: "b'\"'",
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
"op": "To Python bytes",
|
"op": "To Byte String Literal",
|
||||||
"args": []
|
"args": ["python"]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Literal: double quote and data",
|
name: "Literal: python - double quote and data",
|
||||||
input: "aaa\"bbb",
|
input: "aaa\"bbb",
|
||||||
expectedOutput: "b'aaa\"bbb'",
|
expectedOutput: "b'aaa\"bbb'",
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
"op": "To Python bytes",
|
"op": "To Byte String Literal",
|
||||||
"args": []
|
"args": ["python"]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Literal: single + double",
|
name: "Literal: python - single + double",
|
||||||
input: "'\"",
|
input: "'\"",
|
||||||
expectedOutput: "b'\\'\"'",
|
expectedOutput: "b'\\'\"'",
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
"op": "To Python bytes",
|
"op": "To Byte String Literal",
|
||||||
"args": []
|
"args": ["python"]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Literal: double + single",
|
name: "Literal: python - double + single",
|
||||||
input: "\"'",
|
input: "\"'",
|
||||||
expectedOutput: "b'\"\\''",
|
expectedOutput: "b'\"\\''",
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
"op": "To Python bytes",
|
"op": "To Byte String Literal",
|
||||||
"args": []
|
"args": ["python"]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Literal: UTF-8 encoded string",
|
name: "Literal: python - UTF-8 encoded string",
|
||||||
input: "ça ma couté 20€",
|
input: "ça ma couté 20€",
|
||||||
expectedOutput: "b'\\xc3\\xa7a ma cout\\xc3\\xa9 20\\xe2\\x82\\xac'",
|
expectedOutput: "b'\\xc3\\xa7a ma cout\\xc3\\xa9 20\\xe2\\x82\\xac'",
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
"op": "To Python bytes",
|
"op": "To Byte String Literal",
|
||||||
"args": []
|
"args": ["python"]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Literal: all 256 byte values",
|
name: "Literal: python - all 256 byte values",
|
||||||
input: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==",
|
input: "00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff",
|
||||||
expectedOutput: "b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b\\x0c\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x8d\\x8e\\x8f\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff'",
|
expectedOutput: "b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b\\x0c\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x8d\\x8e\\x8f\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff'",
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
"op": "From Base64",
|
"op": "From Hex",
|
||||||
"args": ["A-Za-z0-9+/="]
|
"args": ["Auto"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"op": "To Python bytes",
|
"op": "To Byte String Literal",
|
||||||
"args": []
|
"args": ["python"]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
Loading…
Add table
Add a link
Reference in a new issue