mirror of
https://github.com/gchq/CyberChef
synced 2025-01-01 07:18:47 +00:00
Merge branch 'master' into rsa
This commit is contained in:
commit
d4ae241758
9 changed files with 2056 additions and 2407 deletions
4346
package-lock.json
generated
4346
package-lock.json
generated
File diff suppressed because it is too large
Load diff
12
package.json
12
package.json
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "cyberchef",
|
"name": "cyberchef",
|
||||||
"version": "9.20.3",
|
"version": "9.20.7",
|
||||||
"description": "The Cyber Swiss Army Knife for encryption, encoding, compression and data analysis.",
|
"description": "The Cyber Swiss Army Knife for encryption, encoding, compression and data analysis.",
|
||||||
"author": "n1474335 <n1474335@gmail.com>",
|
"author": "n1474335 <n1474335@gmail.com>",
|
||||||
"homepage": "https://gchq.github.io/CyberChef",
|
"homepage": "https://gchq.github.io/CyberChef",
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
"babel-eslint": "^10.1.0",
|
"babel-eslint": "^10.1.0",
|
||||||
"babel-loader": "^8.0.6",
|
"babel-loader": "^8.0.6",
|
||||||
"babel-plugin-dynamic-import-node": "^2.3.0",
|
"babel-plugin-dynamic-import-node": "^2.3.0",
|
||||||
"chromedriver": "^80.0.1",
|
"chromedriver": "^83.0.0",
|
||||||
"cli-progress": "^3.6.0",
|
"cli-progress": "^3.6.0",
|
||||||
"colors": "^1.4.0",
|
"colors": "^1.4.0",
|
||||||
"copy-webpack-plugin": "^5.1.1",
|
"copy-webpack-plugin": "^5.1.1",
|
||||||
|
@ -66,7 +66,7 @@
|
||||||
"html-webpack-plugin": "^3.2.0",
|
"html-webpack-plugin": "^3.2.0",
|
||||||
"imports-loader": "^0.8.0",
|
"imports-loader": "^0.8.0",
|
||||||
"mini-css-extract-plugin": "^0.9.0",
|
"mini-css-extract-plugin": "^0.9.0",
|
||||||
"nightwatch": "^1.3.4",
|
"nightwatch": "^1.3.5",
|
||||||
"node-sass": "^4.13.1",
|
"node-sass": "^4.13.1",
|
||||||
"postcss-css-variables": "^0.14.0",
|
"postcss-css-variables": "^0.14.0",
|
||||||
"postcss-import": "^12.0.1",
|
"postcss-import": "^12.0.1",
|
||||||
|
@ -92,7 +92,7 @@
|
||||||
"bcryptjs": "^2.4.3",
|
"bcryptjs": "^2.4.3",
|
||||||
"bignumber.js": "^9.0.0",
|
"bignumber.js": "^9.0.0",
|
||||||
"blakejs": "^1.1.0",
|
"blakejs": "^1.1.0",
|
||||||
"bootstrap": "4.4.1",
|
"bootstrap": "4.5.0",
|
||||||
"bootstrap-colorpicker": "^3.2.0",
|
"bootstrap-colorpicker": "^3.2.0",
|
||||||
"bootstrap-material-design": "^4.1.2",
|
"bootstrap-material-design": "^4.1.2",
|
||||||
"bson": "^4.0.3",
|
"bson": "^4.0.3",
|
||||||
|
@ -108,14 +108,13 @@
|
||||||
"es6-promisify": "^6.1.0",
|
"es6-promisify": "^6.1.0",
|
||||||
"escodegen": "^1.14.1",
|
"escodegen": "^1.14.1",
|
||||||
"esm": "^3.2.25",
|
"esm": "^3.2.25",
|
||||||
"esmangle": "^1.0.1",
|
|
||||||
"esprima": "^4.0.1",
|
"esprima": "^4.0.1",
|
||||||
"exif-parser": "^0.1.12",
|
"exif-parser": "^0.1.12",
|
||||||
"file-saver": "^2.0.2",
|
"file-saver": "^2.0.2",
|
||||||
"geodesy": "^1.1.3",
|
"geodesy": "^1.1.3",
|
||||||
"highlight.js": "^9.18.1",
|
"highlight.js": "^9.18.1",
|
||||||
"jimp": "^0.9.5",
|
"jimp": "^0.9.5",
|
||||||
"jquery": "3.4.1",
|
"jquery": "3.5.0",
|
||||||
"js-crc": "^0.2.0",
|
"js-crc": "^0.2.0",
|
||||||
"js-sha3": "^0.8.0",
|
"js-sha3": "^0.8.0",
|
||||||
"jsesc": "^2.5.2",
|
"jsesc": "^2.5.2",
|
||||||
|
@ -146,6 +145,7 @@
|
||||||
"sortablejs": "^1.10.2",
|
"sortablejs": "^1.10.2",
|
||||||
"split.js": "^1.5.11",
|
"split.js": "^1.5.11",
|
||||||
"ssdeep.js": "0.0.2",
|
"ssdeep.js": "0.0.2",
|
||||||
|
"terser": "^4.3.9",
|
||||||
"tesseract.js": "^2.0.2",
|
"tesseract.js": "^2.0.2",
|
||||||
"ua-parser-js": "^0.7.21",
|
"ua-parser-js": "^0.7.21",
|
||||||
"unorm": "^1.6.0",
|
"unorm": "^1.6.0",
|
||||||
|
|
|
@ -4,10 +4,9 @@
|
||||||
* @license Apache-2.0
|
* @license Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import OperationError from "../errors/OperationError.mjs";
|
||||||
import Operation from "../Operation.mjs";
|
import Operation from "../Operation.mjs";
|
||||||
import * as esprima from "esprima";
|
import Terser from "terser";
|
||||||
import escodegen from "escodegen";
|
|
||||||
import esmangle from "esmangle";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JavaScript Minify operation
|
* JavaScript Minify operation
|
||||||
|
@ -34,22 +33,11 @@ class JavaScriptMinify extends Operation {
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
run(input, args) {
|
run(input, args) {
|
||||||
let result = "";
|
const result = Terser.minify(input);
|
||||||
const AST = esprima.parseScript(input),
|
if (result.error) {
|
||||||
optimisedAST = esmangle.optimize(AST, null),
|
throw new OperationError(`Error minifying JavaScript. (${result.error})`);
|
||||||
mangledAST = esmangle.mangle(optimisedAST);
|
}
|
||||||
|
return result.code;
|
||||||
result = escodegen.generate(mangledAST, {
|
|
||||||
format: {
|
|
||||||
renumber: true,
|
|
||||||
hexadecimal: true,
|
|
||||||
escapeless: true,
|
|
||||||
compact: true,
|
|
||||||
semicolons: false,
|
|
||||||
parentheses: false
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,7 @@ class NormaliseUnicode extends Operation {
|
||||||
case "NFKD":
|
case "NFKD":
|
||||||
return unorm.nfkd(input);
|
return unorm.nfkd(input);
|
||||||
case "NFKC":
|
case "NFKC":
|
||||||
return unorm.nfc(input);
|
return unorm.nfkc(input);
|
||||||
default:
|
default:
|
||||||
throw new OperationError("Unknown Normalisation Form");
|
throw new OperationError("Unknown Normalisation Form");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* @author n1474335 [n1474335@gmail.com]
|
* @author n1474335 [n1474335@gmail.com]
|
||||||
* @author mshwed [m@ttshwed.com]
|
* @author mshwed [m@ttshwed.com]
|
||||||
|
* @author Matt C [me@mitt.dev]
|
||||||
* @copyright Crown Copyright 2019
|
* @copyright Crown Copyright 2019
|
||||||
* @license Apache-2.0
|
* @license Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
@ -12,7 +13,7 @@ import { toBase64 } from "../lib/Base64.mjs";
|
||||||
import { isWorkerEnvironment } from "../Utils.mjs";
|
import { isWorkerEnvironment } from "../Utils.mjs";
|
||||||
|
|
||||||
import Tesseract from "tesseract.js";
|
import Tesseract from "tesseract.js";
|
||||||
const { TesseractWorker } = Tesseract;
|
const { createWorker } = Tesseract;
|
||||||
|
|
||||||
import process from "process";
|
import process from "process";
|
||||||
|
|
||||||
|
@ -60,23 +61,30 @@ class OpticalCharacterRecognition extends Operation {
|
||||||
const assetDir = isWorkerEnvironment() ? `${self.docURL}/assets/` : `${process.cwd()}/src/core/vendor/`;
|
const assetDir = isWorkerEnvironment() ? `${self.docURL}/assets/` : `${process.cwd()}/src/core/vendor/`;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
self.sendStatusMessage("Spinning up Tesseract worker...");
|
||||||
const image = `data:${type};base64,${toBase64(input)}`;
|
const image = `data:${type};base64,${toBase64(input)}`;
|
||||||
const worker = new TesseractWorker({
|
const worker = createWorker({
|
||||||
workerPath: `${assetDir}tesseract/worker.min.js`,
|
workerPath: `${assetDir}tesseract/worker.min.js`,
|
||||||
langPath: `${assetDir}tesseract/lang-data`,
|
langPath: `${assetDir}tesseract/lang-data`,
|
||||||
corePath: `${assetDir}tesseract/tesseract-core.wasm.js`,
|
corePath: `${assetDir}tesseract/tesseract-core.wasm.js`,
|
||||||
});
|
logger: progress => {
|
||||||
const result = await worker.recognize(image)
|
|
||||||
.progress(progress => {
|
|
||||||
if (isWorkerEnvironment()) {
|
if (isWorkerEnvironment()) {
|
||||||
self.sendStatusMessage(`Status: ${progress.status} - ${(parseFloat(progress.progress)*100).toFixed(2)}%`);
|
self.sendStatusMessage(`Status: ${progress.status}${progress.status === "recognizing text" ? ` - ${(parseFloat(progress.progress)*100).toFixed(2)}%`: "" }`);
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
});
|
||||||
|
await worker.load();
|
||||||
|
self.sendStatusMessage("Loading English language...");
|
||||||
|
await worker.loadLanguage("eng");
|
||||||
|
self.sendStatusMessage("Intialising Tesseract API...");
|
||||||
|
await worker.initialize("eng");
|
||||||
|
self.sendStatusMessage("Finding text...");
|
||||||
|
const result = await worker.recognize(image);
|
||||||
|
|
||||||
if (showConfidence) {
|
if (showConfidence) {
|
||||||
return `Confidence: ${result.confidence}%\n\n${result.text}`;
|
return `Confidence: ${result.data.confidence}%\n\n${result.data.text}`;
|
||||||
} else {
|
} else {
|
||||||
return result.text;
|
return result.data.text;
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
throw new OperationError(`Error performing OCR on image. (${err})`);
|
throw new OperationError(`Error performing OCR on image. (${err})`);
|
||||||
|
|
24
src/core/vendor/tesseract/tesseract-core.wasm.js
vendored
24
src/core/vendor/tesseract/tesseract-core.wasm.js
vendored
File diff suppressed because one or more lines are too long
17
src/core/vendor/tesseract/worker.min.js
vendored
17
src/core/vendor/tesseract/worker.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -42,7 +42,7 @@ TestRegister.addTests([
|
||||||
}, {
|
}, {
|
||||||
name: "Normalise Unicode - NFKC",
|
name: "Normalise Unicode - NFKC",
|
||||||
input: "\u00c7\u0043\u0327\u2160",
|
input: "\u00c7\u0043\u0327\u2160",
|
||||||
expectedMatch: /\u00C7\u00C7\u2160/,
|
expectedMatch: /\u00C7\u00C7I/,
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
op: "Normalise Unicode",
|
op: "Normalise Unicode",
|
||||||
|
|
|
@ -61,6 +61,14 @@ module.exports = {
|
||||||
context: "node_modules/node-forge/dist",
|
context: "node_modules/node-forge/dist",
|
||||||
from: "prime.worker.min.js",
|
from: "prime.worker.min.js",
|
||||||
to: "assets/forge/"
|
to: "assets/forge/"
|
||||||
|
}, {
|
||||||
|
context: "node_modules/tesseract.js/",
|
||||||
|
from: "dist/worker.min.js",
|
||||||
|
to: "assets/tesseract"
|
||||||
|
}, {
|
||||||
|
context: "node_modules/tesseract.js-core/",
|
||||||
|
from: "tesseract-core.wasm.js",
|
||||||
|
to: "assets/tesseract"
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
],
|
],
|
||||||
|
|
Loading…
Reference in a new issue