Merge remote-tracking branch 'refs/remotes/upstream/master'

Conflicts:
	build/prod/cyberchef.htm
	build/prod/index.html
	build/prod/scripts.js
	src/static/stats.txt
This commit is contained in:
Matt C 2016-12-08 09:18:14 +00:00
commit ed5f00d402
8 changed files with 129 additions and 79 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -80,10 +80,10 @@ var Categories = [
"ROT47", "ROT47",
"XOR", "XOR",
"XOR Brute Force", "XOR Brute Force",
"Vigenère Encode",
"Vigenère Decode",
"Derive PBKDF2 key", "Derive PBKDF2 key",
"Derive EVP key", "Derive EVP key",
"Vigenere Encode",
"Vigenere Decode"
] ]
}, },
{ {

View file

@ -1325,33 +1325,33 @@ var OperationConfig = {
}, },
] ]
}, },
"Vigenere Encode": { "Vigenère Encode": {
description: "Encodes string with the Vigenere cipher.", description: "The Vigenere cipher is a method of encrypting alphabetic text by using a series of different Caesar ciphers based on the letters of a keyword. It is a simple form of polyalphabetic substitution.",
run: Cipher.run_vigenc, run: Cipher.run_vigenere_enc,
highlight: true, highlight: true,
highlight_reverse: true, highlight_reverse: true,
input_type: "string", input_type: "string",
output_type: "string", output_type: "string",
args: [ args: [
{ {
name: "Keyword", name: "Key",
type: "string", type: "string",
value: Cipher.VIG_ENC_KEY value: ""
} }
] ]
}, },
"Vigenere Decode": { "Vigenère Decode": {
description: "Decodes string with the Vigenere cipher.", description: "The Vigenere cipher is a method of encrypting alphabetic text by using a series of different Caesar ciphers based on the letters of a keyword. It is a simple form of polyalphabetic substitution.",
run: Cipher.run_vigdec, run: Cipher.run_vigenere_dec,
highlight: true, highlight: true,
highlight_reverse: true, highlight_reverse: true,
input_type: "string", input_type: "string",
output_type: "string", output_type: "string",
args: [ args: [
{ {
name: "Keyword", name: "Key",
type: "string", type: "string",
value: Cipher.VIG_DEC_KEY value: ""
} }
] ]
}, },

View file

@ -387,101 +387,94 @@ var Cipher = {
/** /**
* @constant * Vigenère Encode operation.
* @default
*/
VIG_ENC_KEY: "cipher",
/**
* Vigenere cipher encode.
* *
* @author Matt C [matt@artemisbot.pw] * @author Matt C [matt@artemisbot.pw]
* @param {string} input * @param {string} input
* @param {Object[]} args * @param {Object[]} args
* @returns {string} * @returns {string}
*/ */
run_vigenc: function (input, args) { run_vigenere_enc: function (input, args) {
var alphabet = "abcdefghijklmnopqrstuvwxyz", var alphabet = "abcdefghijklmnopqrstuvwxyz",
keyword = args[0].toLowerCase(), key = args[0].toLowerCase(),
output = "", output = "",
fail = 0, fail = 0,
keyIndex, key_index,
msgIndex, msg_index,
chr; chr;
if (keyword) {
if (/^[a-zA-Z]+$/.test(keyword)) { if (!key) return "No key entered";
if (!/^[a-zA-Z]+$/.test(key)) return "The key must consist only of letters";
for (var i = 0; i < input.length; i++) { for (var i = 0; i < input.length; i++) {
if (alphabet.indexOf(input[i]) >= 0) { if (alphabet.indexOf(input[i]) >= 0) {
chr = keyword[(i - fail) % keyword.length]; //Gets the corresponding character of keyword for current letter, accounting for chars not in alphabet // Get the corresponding character of key for the current letter, accounting
keyIndex = alphabet.indexOf(chr); //Gets location in vigenere square of keyword char // for chars not in alphabet
msgIndex = alphabet.indexOf(input[i]); //Gets location in vigenere square of message char chr = key[(i - fail) % key.length];
output += alphabet[(keyIndex + msgIndex) % 26]; //Gets encoded letter by finding sum of indexes modulo 26 and finding the letter corresponding to that // Get the location in the vigenere square of the key char
key_index = alphabet.indexOf(chr);
// Get the location in the vigenere square of the message char
msg_index = alphabet.indexOf(input[i]);
// Get the encoded letter by finding the sum of indexes modulo 26 and finding
// the letter corresponding to that
output += alphabet[(key_index + msg_index) % 26];
} else if (alphabet.indexOf(input[i].toLowerCase()) >= 0) { } else if (alphabet.indexOf(input[i].toLowerCase()) >= 0) {
chr = keyword[(i - fail) % keyword.length].toLowerCase(); chr = key[(i - fail) % key.length].toLowerCase();
keyIndex = alphabet.indexOf(chr); key_index = alphabet.indexOf(chr);
msgIndex = alphabet.indexOf(input[i].toLowerCase()); msg_index = alphabet.indexOf(input[i].toLowerCase());
output += alphabet[(keyIndex + msgIndex) % 26].toUpperCase(); output += alphabet[(key_index + msg_index) % 26].toUpperCase();
} else { } else {
output += input[i]; output += input[i];
fail++; fail++;
} }
} }
} else {
throw "Keyword can only consist of letters.";
}
} else {
throw "A keyword is required.";
}
return output; return output;
}, },
/**
* @constant
* @default
*/
VIG_DEC_KEY: "cipher",
/** /**
* Vigenere cipher decode. * Vigenère Decode operation.
* *
* @author Matt C [matt@artemisbot.pw] * @author Matt C [matt@artemisbot.pw]
* @param {string} input * @param {string} input
* @param {Object[]} args * @param {Object[]} args
* @returns {string} * @returns {string}
*/ */
run_vigdec: function (input, args) { run_vigenere_dec: function (input, args) {
var alphabet = "abcdefghijklmnopqrstuvwxyz", var alphabet = "abcdefghijklmnopqrstuvwxyz",
keyword = args[0].toLowerCase(), key = args[0].toLowerCase(),
output = "", output = "",
fail = 0, fail = 0,
keyIndex, key_index,
msgIndex, msg_index,
chr; chr;
if (keyword) {
if (/^[a-zA-Z]+$/.test(keyword)) { if (!key) return "No key entered";
if (!/^[a-zA-Z]+$/.test(key)) return "The key must consist only of letters";
for (var i = 0; i < input.length; i++) { for (var i = 0; i < input.length; i++) {
if (alphabet.indexOf(input[i]) >= 0) { if (alphabet.indexOf(input[i]) >= 0) {
chr = keyword[(i - fail) % keyword.length]; chr = key[(i - fail) % key.length];
keyIndex = alphabet.indexOf(chr); key_index = alphabet.indexOf(chr);
msgIndex = alphabet.indexOf(input[i]); msg_index = alphabet.indexOf(input[i]);
output += alphabet[(msgIndex - keyIndex + alphabet.length ) % 26]; //subtract indexes from each other, add 26 just in case the value is negative, modulo to remove if neccessary // Subtract indexes from each other, add 26 just in case the value is negative,
// modulo to remove if neccessary
output += alphabet[(msg_index - key_index + alphabet.length ) % 26];
} else if (alphabet.indexOf(input[i].toLowerCase()) >= 0) { } else if (alphabet.indexOf(input[i].toLowerCase()) >= 0) {
chr = keyword[(i - fail) % keyword.length].toLowerCase(); chr = key[(i - fail) % key.length].toLowerCase();
keyIndex = alphabet.indexOf(chr); key_index = alphabet.indexOf(chr);
msgIndex = alphabet.indexOf(input[i].toLowerCase()); msg_index = alphabet.indexOf(input[i].toLowerCase());
output += alphabet[(msgIndex + alphabet.length - keyIndex) % 26].toUpperCase(); output += alphabet[(msg_index + alphabet.length - key_index) % 26].toUpperCase();
} else { } else {
output += input[i]; output += input[i];
fail++; fail++;
} }
} }
} else {
throw "Keyword can only consist of letters.";
}
} else {
throw "A keyword is required.";
}
return output; return output;
} },
}; };

View file

@ -53,6 +53,13 @@ RecipeWaiter.prototype.initialise_operation_drag_n_drop = function() {
this.app.progress = 0; this.app.progress = 0;
}.bind(this)); }.bind(this));
Sortable.utils.on(rec_list, "touchend", function(e) {
var loc = e.changedTouches[0],
target = document.elementFromPoint(loc.clientX, loc.clientY);
this.remove_intent = !rec_list.contains(target);
}.bind(this));
// Favourites category // Favourites category
document.querySelector("#categories a").addEventListener("dragover", this.fav_dragover.bind(this)); document.querySelector("#categories a").addEventListener("dragover", this.fav_dragover.bind(this));
document.querySelector("#categories a").addEventListener("dragleave", this.fav_dragleave.bind(this)); document.querySelector("#categories a").addEventListener("dragleave", this.fav_dragleave.bind(this));

View file

@ -1,18 +1,32 @@
203 source files 203 source files
<<<<<<< HEAD
104401 lines 104401 lines
size size
136 JavaScript source files 136 JavaScript source files
95311 lines 95311 lines
3.4M size 3.4M size
=======
104403 lines
4.0M size
136 JavaScript source files
95313 lines
3.5M size
>>>>>>> master
78 third party JavaScript source files 78 third party JavaScript source files
76377 lines 76377 lines
2.7M size 2.7M size
58 first party JavaScript source files 58 first party JavaScript source files
<<<<<<< HEAD
18934 lines 18934 lines
729K size 729K size
=======
18936 lines
728K size
>>>>>>> master
3.2M uncompressed JavaScript size 3.2M uncompressed JavaScript size
1.7M compressed JavaScript size 1.7M compressed JavaScript size