Kaynağa Gözat

Added Bzip2 compression support

Matt 6 yıl önce
ebeveyn
işleme
3cc66e9db9
3 değiştirilmiş dosya ile 84 ekleme ve 4 silme
  1. 9 4
      package-lock.json
  2. 1 0
      package.json
  3. 74 0
      src/core/operations/Bzip2Compress.mjs

+ 9 - 4
package-lock.json

@@ -5726,7 +5726,7 @@
     },
     },
     "get-stream": {
     "get-stream": {
       "version": "3.0.0",
       "version": "3.0.0",
-      "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
       "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
       "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
       "dev": true
       "dev": true
     },
     },
@@ -6482,7 +6482,7 @@
     },
     },
     "html-webpack-plugin": {
     "html-webpack-plugin": {
       "version": "3.2.0",
       "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz",
+      "resolved": "http://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz",
       "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
       "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -6607,7 +6607,7 @@
     },
     },
     "http-proxy-middleware": {
     "http-proxy-middleware": {
       "version": "0.18.0",
       "version": "0.18.0",
-      "resolved": "http://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz",
+      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz",
       "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==",
       "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -7797,6 +7797,11 @@
       "resolved": "https://registry.npmjs.org/lex-parser/-/lex-parser-0.1.4.tgz",
       "resolved": "https://registry.npmjs.org/lex-parser/-/lex-parser-0.1.4.tgz",
       "integrity": "sha1-ZMTwJfF/1Tv7RXY/rrFvAVp0dVA="
       "integrity": "sha1-ZMTwJfF/1Tv7RXY/rrFvAVp0dVA="
     },
     },
+    "libbzip2-wasm": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/libbzip2-wasm/-/libbzip2-wasm-0.0.3.tgz",
+      "integrity": "sha512-eJpB5ITwsdyjWu7DUJirHaBSFLhSbcz8txvL0Gf9NOb+HIzp/lRxFSDXyNAi59ncbhHe3xX+3gj0o+l8rSdJHQ=="
+    },
     "libyara-wasm": {
     "libyara-wasm": {
       "version": "0.0.12",
       "version": "0.0.12",
       "resolved": "https://registry.npmjs.org/libyara-wasm/-/libyara-wasm-0.0.12.tgz",
       "resolved": "https://registry.npmjs.org/libyara-wasm/-/libyara-wasm-0.0.12.tgz",
@@ -9526,7 +9531,7 @@
     },
     },
     "parse-asn1": {
     "parse-asn1": {
       "version": "5.1.1",
       "version": "5.1.1",
-      "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
+      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
       "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
       "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {

+ 1 - 0
package.json

@@ -110,6 +110,7 @@
     "jsqr": "^1.1.1",
     "jsqr": "^1.1.1",
     "jsrsasign": "8.0.12",
     "jsrsasign": "8.0.12",
     "kbpgp": "^2.0.82",
     "kbpgp": "^2.0.82",
+    "libbzip2-wasm": "0.0.3",
     "libyara-wasm": "0.0.12",
     "libyara-wasm": "0.0.12",
     "lodash": "^4.17.11",
     "lodash": "^4.17.11",
     "loglevel": "^1.6.1",
     "loglevel": "^1.6.1",

+ 74 - 0
src/core/operations/Bzip2Compress.mjs

@@ -0,0 +1,74 @@
+/**
+ * @author Matt C [me@mitt.dev]
+ * @copyright Crown Copyright 2019
+ * @license Apache-2.0
+ */
+
+import Operation from "../Operation";
+import OperationError from "../errors/OperationError";
+import Bzip2 from "libbzip2-wasm";
+
+/**
+ * Bzip2 Compress operation
+ */
+class Bzip2Compress extends Operation {
+
+    /**
+     * Bzip2Compress constructor
+     */
+    constructor() {
+        super();
+
+        this.name = "Bzip2 Compress";
+        this.module = "Compression";
+        this.description = "yeet";
+        this.infoURL = "https://en.wikipedia.org/wiki/Bzip2";
+        this.inputType = "ArrayBuffer";
+        this.outputType = "File";
+        this.args = [
+            {
+                name: "Block size (100s of kb)",
+                type: "number",
+                value: 9
+            },
+            {
+                name: "Work factor",
+                type: "number",
+                value: 30
+            },
+            {
+                name: "Compressed filename",
+                type: "string",
+                value: "compressed.bz2"
+            }
+        ];
+    }
+
+    /**
+     * @param {ArrayBuffer} input
+     * @param {Object[]} args
+     * @returns {File}
+     */
+    run(input, args) {
+        const [blockSize, workFactor, filename] = args;
+        if (input.byteLength <= 0) {
+            throw new OperationError("Please provide an input.");
+        }
+        if (ENVIRONMENT_IS_WORKER()) self.sendStatusMessage("Loading Bzip2...");
+        return new Promise((resolve, reject) => {
+            Bzip2().then(bzip2 => {
+                if (ENVIRONMENT_IS_WORKER()) self.sendStatusMessage("Compressing data...");
+                const inpArray = new Uint8Array(input);
+                const bzip2cc = bzip2.compressBZ2(inpArray, blockSize, workFactor);
+                if (bzip2cc.error !== 0) {
+                    reject(new OperationError(bzip2cc.error_msg));
+                } else {
+                    resolve(new File([bzip2cc.output], filename));
+                }
+            });
+        });
+    }
+
+}
+
+export default Bzip2Compress;