ソースを参照

Merge remote-tracking branch 'upstream/master'

n1073645 5 年 前
コミット
30c6917914

+ 1 - 1
package-lock.json

@@ -1,6 +1,6 @@
 {
   "name": "cyberchef",
-  "version": "9.11.2",
+  "version": "9.11.5",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "cyberchef",
-  "version": "9.11.2",
+  "version": "9.11.5",
   "description": "The Cyber Swiss Army Knife for encryption, encoding, compression and data analysis.",
   "author": "n1474335 <n1474335@gmail.com>",
   "homepage": "https://gchq.github.io/CyberChef",

+ 3 - 6
src/core/lib/Stream.mjs

@@ -156,7 +156,6 @@ export default class Stream {
 
         // val is an array
 
-
         /**
          * Builds the skip forward table from the value to be searched.
          *
@@ -173,9 +172,7 @@ export default class Stream {
         }
 
         const length = val.length;
-
         const initial = val[length-1];
-
         this.position = length;
 
         // Get the skip table.
@@ -183,7 +180,6 @@ export default class Stream {
         let found = true;
 
         while (this.position < this.length) {
-
             // Until we hit the final element of val in the stream.
             while ((this.position < this.length) && (this.bytes[this.position++] !== initial));
 
@@ -191,7 +187,7 @@ export default class Stream {
 
             // Loop through the elements comparing them to val.
             for (let x = length-1; x >= 0; x--) {
-                if (this.bytes[this.position-length + x] !== val[x]) {
+                if (this.bytes[this.position - length + x] !== val[x]) {
                     found = false;
 
                     // If element is not equal to val's element then jump forward by the correct amount.
@@ -208,7 +204,7 @@ export default class Stream {
 
 
     /**
-     * Consume bytes if it matches the supplied value.
+     * Consume bytes if they match the supplied value.
      *
      * @param {Number} val
      */
@@ -219,6 +215,7 @@ export default class Stream {
             }
             this.position++;
         }
+        this.bitPos = 0;
     }
 
     /**

+ 12 - 5
src/core/operations/FromBase62.mjs

@@ -42,15 +42,22 @@ class FromBase62 extends Operation {
      */
     run(input, args) {
         if (input.length < 1) return [];
-        const ALPHABET = Utils.expandAlphRange(args[0]).join("");
-        const BN = BigNumber.clone({ ALPHABET });
+        const alphabet = Utils.expandAlphRange(args[0]).join("");
+        const BN62 = BigNumber.clone({ ALPHABET: alphabet });
 
-        const re = new RegExp("[^" + ALPHABET.replace(/[[\]\\\-^$]/g, "\\$&") + "]", "g");
+        const re = new RegExp("[^" + alphabet.replace(/[[\]\\\-^$]/g, "\\$&") + "]", "g");
         input = input.replace(re, "");
 
-        const number = new BN(input, 62);
+        // Read number in using Base62 alphabet
+        const number = new BN62(input, 62);
+        // Copy to new BigNumber object that uses the default alphabet
+        const normalized = new BigNumber(number);
 
-        return Utils.convertToByteArray(number.toString(16), "Hex");
+        // Convert to hex and add leading 0 if required
+        let hex = normalized.toString(16);
+        if (hex.length % 2 !== 0) hex = "0" + hex;
+
+        return Utils.convertToByteArray(hex, "Hex");
     }
 
 }

+ 2 - 2
src/core/operations/Lorenz.mjs

@@ -6,8 +6,8 @@
  * @license Apache-2.0
  */
 
-import Operation from "../Operation";
-import OperationError from "../errors/OperationError";
+import Operation from "../Operation.mjs";
+import OperationError from "../errors/OperationError.mjs";
 
 /**
  * Lorenz operation

+ 6 - 3
src/core/operations/ToBase62.mjs

@@ -44,12 +44,15 @@ class ToBase62 extends Operation {
         input = new Uint8Array(input);
         if (input.length < 1) return "";
 
-        const ALPHABET = Utils.expandAlphRange(args[0]).join("");
-        const BN = BigNumber.clone({ ALPHABET });
+        const alphabet = Utils.expandAlphRange(args[0]).join("");
+        const BN62 = BigNumber.clone({ ALPHABET: alphabet });
 
         input = toHexFast(input).toUpperCase();
 
-        const number = new BN(input, 16);
+        // Read number in as hex using normal alphabet
+        const normalized = new BigNumber(input, 16);
+        // Copy to BigNumber clone that uses the specified Base62 alphabet
+        const number = new BN62(normalized);
 
         return number.toString(62);
     }