From 14b7c4bf239b0cb69a2ac1619e7a944c88b2baf5 Mon Sep 17 00:00:00 2001 From: n1474335 Date: Fri, 23 Jun 2017 13:21:19 +0000 Subject: [PATCH] Improved support for different alphabets in 'Substitute' operation --- src/core/config/OperationConfig.js | 4 ++-- src/core/operations/Cipher.js | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/core/config/OperationConfig.js b/src/core/config/OperationConfig.js index 718e23e7..cac54b9e 100755 --- a/src/core/config/OperationConfig.js +++ b/src/core/config/OperationConfig.js @@ -3196,8 +3196,8 @@ const OperationConfig = { "Substitute": { description: "A substitution cipher allowing you to specify bytes to replace with other byte values. This can be used to create Caesar ciphers but is more powerful as any byte value can be substituted, not just letters, and the substitution values need not be in order.

Enter the bytes you want to replace in the Plaintext field and the bytes to replace them with in the Ciphertext field.

Non-printable bytes can be specified using string escape notation. For example, a line feed character can be written as either \\n or \\x0a.

Byte ranges can be specified using a hyphen. For example, the sequence 0123456789 can be written as 0-9.", run: Cipher.runSubstitute, - inputType: "byteArray", - outputType: "byteArray", + inputType: "string", + outputType: "string", args: [ { name: "Plaintext", diff --git a/src/core/operations/Cipher.js b/src/core/operations/Cipher.js index 8db28d0b..95ebebca 100755 --- a/src/core/operations/Cipher.js +++ b/src/core/operations/Cipher.js @@ -608,23 +608,23 @@ const Cipher = { /** * Substitute operation. * - * @param {byteArray} input + * @param {string} input * @param {Object[]} args - * @returns {byteArray} + * @returns {string} */ runSubstitute: function (input, args) { - let plaintext = Utils.strToByteArray(Utils.expandAlphRange(args[0]).join()), - ciphertext = Utils.strToByteArray(Utils.expandAlphRange(args[1]).join()), - output = [], + let plaintext = Utils.expandAlphRange(args[0]).join(), + ciphertext = Utils.expandAlphRange(args[1]).join(), + output = "", index = -1; if (plaintext.length !== ciphertext.length) { - output = Utils.strToByteArray("Warning: Plaintext and Ciphertext lengths differ\n\n"); + output = "Warning: Plaintext and Ciphertext lengths differ\n\n"; } for (let i = 0; i < input.length; i++) { index = plaintext.indexOf(input[i]); - output.push(index > -1 && index < ciphertext.length ? ciphertext[index] : input[i]); + output += index > -1 && index < ciphertext.length ? ciphertext[index] : input[i]; } return output;