mirror of
https://github.com/gchq/CyberChef.git
synced 2025-04-21 07:16:17 -04:00
Add tests and handle decompress returning string or array
This commit is contained in:
parent
d502dd9857
commit
98a70c2dd2
3 changed files with 65 additions and 6 deletions
|
@ -8,6 +8,7 @@ import Operation from "../Operation.mjs";
|
||||||
import OperationError from "../errors/OperationError.mjs";
|
import OperationError from "../errors/OperationError.mjs";
|
||||||
|
|
||||||
import { compress } from "@blu3r4y/lzma";
|
import { compress } from "@blu3r4y/lzma";
|
||||||
|
import {isWorkerEnvironment} from "../Utils.mjs";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LZMA Compress operation
|
* LZMA Compress operation
|
||||||
|
@ -43,7 +44,7 @@ class LZMACompress extends Operation {
|
||||||
* @param {Object[]} args
|
* @param {Object[]} args
|
||||||
* @returns {ArrayBuffer}
|
* @returns {ArrayBuffer}
|
||||||
*/
|
*/
|
||||||
run(input, args) {
|
async run(input, args) {
|
||||||
const mode = Number(args[0]);
|
const mode = Number(args[0]);
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
compress(new Uint8Array(input), mode, (result, error) => {
|
compress(new Uint8Array(input), mode, (result, error) => {
|
||||||
|
@ -53,7 +54,7 @@ class LZMACompress extends Operation {
|
||||||
// The compression returns as an Int8Array, but we can just get the unsigned data from the buffer
|
// The compression returns as an Int8Array, but we can just get the unsigned data from the buffer
|
||||||
resolve(new Int8Array(result).buffer);
|
resolve(new Int8Array(result).buffer);
|
||||||
}, (percent) => {
|
}, (percent) => {
|
||||||
self.sendStatusMessage(`Compressing input: ${(percent*100).toFixed(2)}%`);
|
if (isWorkerEnvironment()) self.sendStatusMessage(`Compressing input: ${(percent*100).toFixed(2)}%`);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
import Operation from "../Operation.mjs";
|
import Operation from "../Operation.mjs";
|
||||||
import OperationError from "../errors/OperationError.mjs";
|
import OperationError from "../errors/OperationError.mjs";
|
||||||
import {decompress} from "@blu3r4y/lzma";
|
import {decompress} from "@blu3r4y/lzma";
|
||||||
|
import Utils, {isWorkerEnvironment} from "../Utils.mjs";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LZMA Decompress operation
|
* LZMA Decompress operation
|
||||||
|
@ -32,16 +33,21 @@ class LZMADecompress extends Operation {
|
||||||
* @param {Object[]} args
|
* @param {Object[]} args
|
||||||
* @returns {ArrayBuffer}
|
* @returns {ArrayBuffer}
|
||||||
*/
|
*/
|
||||||
run(input, args) {
|
async run(input, args) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
decompress(new Uint8Array(input), (result, error) => {
|
decompress(new Uint8Array(input), (result, error) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
reject(new OperationError(`Failed to decompress input: ${error.message}`));
|
reject(new OperationError(`Failed to decompress input: ${error.message}`));
|
||||||
}
|
}
|
||||||
// The decompression returns as an Int8Array, but we can just get the unsigned data from the buffer
|
// The decompression returns either a String or an untyped unsigned int8 array, but we can just get the unsigned data from the buffer
|
||||||
resolve(new Int8Array(result).buffer);
|
|
||||||
|
if (typeof result == "string") {
|
||||||
|
resolve(Utils.strToArrayBuffer(result));
|
||||||
|
} else {
|
||||||
|
resolve(new Int8Array(result).buffer);
|
||||||
|
}
|
||||||
}, (percent) => {
|
}, (percent) => {
|
||||||
self.sendStatusMessage(`Decompressing input: ${(percent*100).toFixed(2)}%`);
|
if (isWorkerEnvironment()) self.sendStatusMessage(`Decompressing input: ${(percent*100).toFixed(2)}%`);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,4 +23,56 @@ TestRegister.addTests([
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "LZMA compress & decompress",
|
||||||
|
input: "The cat sat on the mat.",
|
||||||
|
// Generated using command `echo -n "The cat sat on the mat." | lzma -z -6 | xxd -p`
|
||||||
|
expectedOutput: "The cat sat on the mat.",
|
||||||
|
recipeConfig: [
|
||||||
|
{
|
||||||
|
"op": "LZMA Compress",
|
||||||
|
"args": ["6"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "LZMA Decompress",
|
||||||
|
"args": []
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "LZMA decompress: binary",
|
||||||
|
// Generated using command `echo "00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10" | xxd -r -p | lzma -z -6 | xxd -p`
|
||||||
|
input: "5d00008000ffffffffffffffff00000052500a84f99bb28021a969d627e03e8a922effffbd160000",
|
||||||
|
expectedOutput: "00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10",
|
||||||
|
recipeConfig: [
|
||||||
|
{
|
||||||
|
"op": "From Hex",
|
||||||
|
"args": ["Space"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "LZMA Decompress",
|
||||||
|
"args": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "To Hex",
|
||||||
|
"args": ["Space", 0]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "LZMA decompress: string",
|
||||||
|
// Generated using command `echo -n "The cat sat on the mat." | lzma -z -6 | xxd -p`
|
||||||
|
input: "5d00008000ffffffffffffffff002a1a08a202b1a4b814b912c94c4152e1641907d3fd8cd903ffff4fec0000",
|
||||||
|
expectedOutput: "The cat sat on the mat.",
|
||||||
|
recipeConfig: [
|
||||||
|
{
|
||||||
|
"op": "From Hex",
|
||||||
|
"args": ["Space"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"op": "LZMA Decompress",
|
||||||
|
"args": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
]);
|
]);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue