Merge branch 'base' of https://github.com/john19696/CyberChef
This commit is contained in:
commit
f751de896f
@ -32,7 +32,12 @@ class FromBase45 extends Operation {
|
|||||||
name: "Alphabet",
|
name: "Alphabet",
|
||||||
type: "string",
|
type: "string",
|
||||||
value: ALPHABET
|
value: ALPHABET
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
name: "Remove non-alphabet chars",
|
||||||
|
type: "boolean",
|
||||||
|
value: true
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
this.highlight = highlightFromBase45;
|
this.highlight = highlightFromBase45;
|
||||||
@ -46,10 +51,17 @@ class FromBase45 extends Operation {
|
|||||||
*/
|
*/
|
||||||
run(input, args) {
|
run(input, args) {
|
||||||
if (!input) return [];
|
if (!input) return [];
|
||||||
const alphabet = Utils.expandAlphRange(args[0]);
|
const alphabet = Utils.expandAlphRange(args[0]).join("");
|
||||||
|
const removeNonAlphChars = args[1];
|
||||||
|
|
||||||
const res = [];
|
const res = [];
|
||||||
|
|
||||||
|
// Remove non-alphabet characters
|
||||||
|
if (removeNonAlphChars) {
|
||||||
|
const re = new RegExp("[^" + alphabet.replace(/[[\]\\\-^$]/g, "\\$&") + "]", "g");
|
||||||
|
input = input.replace(re, "");
|
||||||
|
}
|
||||||
|
|
||||||
for (const triple of Utils.chunked(input, 3)) {
|
for (const triple of Utils.chunked(input, 3)) {
|
||||||
triple.reverse();
|
triple.reverse();
|
||||||
let b = 0;
|
let b = 0;
|
||||||
|
@ -32,6 +32,11 @@ class FromBase85 extends Operation {
|
|||||||
type: "editableOption",
|
type: "editableOption",
|
||||||
value: ALPHABET_OPTIONS
|
value: ALPHABET_OPTIONS
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Remove non-alphabet chars",
|
||||||
|
type: "boolean",
|
||||||
|
value: true
|
||||||
|
},
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,6 +48,7 @@ class FromBase85 extends Operation {
|
|||||||
run(input, args) {
|
run(input, args) {
|
||||||
const alphabet = Utils.expandAlphRange(args[0]).join(""),
|
const alphabet = Utils.expandAlphRange(args[0]).join(""),
|
||||||
encoding = alphabetName(alphabet),
|
encoding = alphabetName(alphabet),
|
||||||
|
removeNonAlphChars = args[1],
|
||||||
result = [];
|
result = [];
|
||||||
|
|
||||||
if (alphabet.length !== 85 ||
|
if (alphabet.length !== 85 ||
|
||||||
@ -50,6 +56,12 @@ class FromBase85 extends Operation {
|
|||||||
throw new OperationError("Alphabet must be of length 85");
|
throw new OperationError("Alphabet must be of length 85");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove non-alphabet characters
|
||||||
|
if (removeNonAlphChars) {
|
||||||
|
const re = new RegExp("[^" + alphabet.replace(/[[\]\\\-^$]/g, "\\$&") + "]", "g");
|
||||||
|
input = input.replace(re, "");
|
||||||
|
}
|
||||||
|
|
||||||
if (input.length === 0) return [];
|
if (input.length === 0) return [];
|
||||||
|
|
||||||
const matches = input.match(/<~(.+?)~>/);
|
const matches = input.match(/<~(.+?)~>/);
|
||||||
@ -69,7 +81,7 @@ class FromBase85 extends Operation {
|
|||||||
.map((chr, idx) => {
|
.map((chr, idx) => {
|
||||||
const digit = alphabet.indexOf(chr);
|
const digit = alphabet.indexOf(chr);
|
||||||
if (digit < 0 || digit > 84) {
|
if (digit < 0 || digit > 84) {
|
||||||
throw `Invalid character '${chr}' at index ${idx}`;
|
throw `Invalid character '${chr}' at index ${i + idx}`;
|
||||||
}
|
}
|
||||||
return digit;
|
return digit;
|
||||||
});
|
});
|
||||||
|
@ -84,7 +84,17 @@ class TestRegister {
|
|||||||
|
|
||||||
if (result.error) {
|
if (result.error) {
|
||||||
if (test.expectedError) {
|
if (test.expectedError) {
|
||||||
ret.status = "passing";
|
if (result.error.displayStr === test.expectedOutput) {
|
||||||
|
ret.status = "passing";
|
||||||
|
} else {
|
||||||
|
ret.status = "failing";
|
||||||
|
ret.output = [
|
||||||
|
"Expected",
|
||||||
|
"\t" + test.expectedOutput.replace(/\n/g, "\n\t"),
|
||||||
|
"Received",
|
||||||
|
"\t" + result.error.displayStr.replace(/\n/g, "\n\t"),
|
||||||
|
].join("\n");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ret.status = "erroring";
|
ret.status = "erroring";
|
||||||
ret.output = result.error.displayStr;
|
ret.output = result.error.displayStr;
|
||||||
|
@ -24,6 +24,7 @@ import "./tests/Base45.mjs";
|
|||||||
import "./tests/Base58.mjs";
|
import "./tests/Base58.mjs";
|
||||||
import "./tests/Base64.mjs";
|
import "./tests/Base64.mjs";
|
||||||
import "./tests/Base62.mjs";
|
import "./tests/Base62.mjs";
|
||||||
|
import "./tests/Base85.mjs";
|
||||||
import "./tests/BitwiseOp.mjs";
|
import "./tests/BitwiseOp.mjs";
|
||||||
import "./tests/ByteRepr.mjs";
|
import "./tests/ByteRepr.mjs";
|
||||||
import "./tests/CartesianProduct.mjs";
|
import "./tests/CartesianProduct.mjs";
|
||||||
|
48
tests/operations/tests/Base85.mjs
Normal file
48
tests/operations/tests/Base85.mjs
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/**
|
||||||
|
* Base85 tests
|
||||||
|
*
|
||||||
|
* @author john19696
|
||||||
|
* @copyright Crown Copyright 2019
|
||||||
|
* @license Apache-2.0
|
||||||
|
*/
|
||||||
|
import TestRegister from "../../lib/TestRegister.mjs";
|
||||||
|
|
||||||
|
// Example from Wikipedia
|
||||||
|
const wpExample = "Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.";
|
||||||
|
// Escape newline, quote & backslash
|
||||||
|
const wpOutput = "9jqo^BlbD-BleB1DJ+*+F(f,q/0JhKF<GL>Cj@.4Gp$d7F!,L7@<6@)/0JDEF<G%<+EV:2F!,O<\
|
||||||
|
DJ+*.@<*K0@<6L(Df-\\0Ec5e;DffZ(EZee.Bl.9pF\"AGXBPCsi+DGm>@3BB/F*&OCAfu2/AKYi(\
|
||||||
|
DIb:@FD,*)+C]U=@3BN#EcYf8ATD3s@q?d$AftVqCh[NqF<G:8+EV:.+Cf>-FD5W8ARlolDIal(\
|
||||||
|
DId<j@<?3r@:F%a+D58'ATD4$Bl@l3De:,-DJs`8ARoFb/0JMK@qB4^F!,R<AKZ&-DfTqBG%G>u\
|
||||||
|
D.RTpAKYo'+CT/5+Cei#DII?(E,9)oF*2M7/c";
|
||||||
|
|
||||||
|
TestRegister.addTests([
|
||||||
|
{
|
||||||
|
name: "To Base85",
|
||||||
|
input: wpExample,
|
||||||
|
expectedOutput: wpOutput,
|
||||||
|
recipeConfig: [
|
||||||
|
{ "op": "To Base85",
|
||||||
|
"args": ["!-u"] }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "From Base85",
|
||||||
|
input: wpOutput + "\n",
|
||||||
|
expectedOutput: wpExample,
|
||||||
|
recipeConfig: [
|
||||||
|
{ "op": "From Base85",
|
||||||
|
"args": ["!-u", true] }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "From Base85",
|
||||||
|
input: wpOutput + "v",
|
||||||
|
expectedError: true,
|
||||||
|
expectedOutput: "From Base85 - Invalid character 'v' at index 337",
|
||||||
|
recipeConfig: [
|
||||||
|
{ "op": "From Base85",
|
||||||
|
"args": ["!-u", false] }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
]);
|
Loading…
Reference in New Issue
Block a user