XOR operation now supports both input and output differentials. Fixes #17

This commit is contained in:
n1474335 2016-12-03 01:42:23 +00:00
parent fc9d0a63c2
commit 20d9903572
7 changed files with 47 additions and 39 deletions

View File

@ -445,7 +445,8 @@ module.exports = function(grunt) {
deploy_gh_pages: {
command: [
"git add build/prod/index.html -v",
"git commit -m 'GitHub Pages release'",
"COMMIT_HASH=$(git rev-parse HEAD)",
"git commit -m \"GitHub Pages release for ${COMMIT_HASH}\"",
"git push origin `git subtree split --prefix build/prod master`:gh-pages --force",
"git reset HEAD~",
"git checkout build/prod/index.html"

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

@ -209,7 +209,7 @@ var OperationConfig = {
]
},
"XOR": {
description: "XOR the input with the given key.<br>e.g. <code>fe023da5</code><br><br><strong>Options</strong><br><u>Null preserving:</u> If the current byte is 0x00 or the same as the key, skip it.<br><br><u>Differential:</u> Set the key to the value of the previously decoded byte.",
description: "XOR the input with the given key.<br>e.g. <code>fe023da5</code><br><br><strong>Options</strong><br><u>Null preserving:</u> If the current byte is 0x00 or the same as the key, skip it.<br><br><u>Scheme:</u><ul><li>Standard - key is unchanged after each round</li><li>Input differential - key is set to the value of the previous unprocessed byte</li><li>Output differential - key is set to the value of the previous processed byte</li></ul>",
run: BitwiseOp.run_xor,
highlight: true,
highlight_reverse: true,
@ -222,15 +222,15 @@ var OperationConfig = {
value: "",
toggle_values: BitwiseOp.KEY_FORMAT
},
{
name: "Scheme",
type: "option",
value: BitwiseOp.XOR_SCHEME
},
{
name: "Null preserving",
type: "boolean",
value: BitwiseOp.XOR_PRESERVE_NULLS
},
{
name: "Differential",
type: "boolean",
value: BitwiseOp.XOR_DIFFERENTIAL
}
]
},

View File

@ -19,10 +19,10 @@ var BitwiseOp = {
* @param {byte_array} key
* @param {function} func - The bitwise calculation to carry out
* @param {boolean} null_preserving
* @param {boolean} differential
* @param {string} scheme
* @returns {byte_array}
*/
_bit_op: function (input, key, func, null_preserving, differential) {
_bit_op: function (input, key, func, null_preserving, scheme) {
if (!key || !key.length) key = [0];
var result = [],
x = null,
@ -34,8 +34,15 @@ var BitwiseOp = {
o = input[i];
x = null_preserving && (o === 0 || o == k) ? o : func(o, k);
result.push(x);
if (differential && !(null_preserving && (o === 0 || o == k))) {
key[i % key.length] = x;
if (scheme != "Standard" && !(null_preserving && (o === 0 || o == k))) {
switch (scheme) {
case "Input differential":
key[i % key.length] = x;
break;
case "Output differential":
key[i % key.length] = o;
break;
}
}
}
@ -52,7 +59,7 @@ var BitwiseOp = {
* @constant
* @default
*/
XOR_DIFFERENTIAL: false,
XOR_SCHEME: ["Standard", "Input differential", "Output differential"],
/**
* @constant
* @default
@ -68,12 +75,12 @@ var BitwiseOp = {
*/
run_xor: function (input, args) {
var key = Utils.format[args[0].option].parse(args[0].string || ""),
null_preserving = args[1],
differential = args[2];
scheme = args[1],
null_preserving = args[2];
key = Utils.word_array_to_byte_array(key);
return BitwiseOp._bit_op(input, key, BitwiseOp._xor, null_preserving, differential);
return BitwiseOp._bit_op(input, key, BitwiseOp._xor, null_preserving, scheme);
},

View File

@ -1,9 +1,9 @@
203 source files
104211 lines
104218 lines
4.0M size
136 JavaScript source files
95121 lines
95128 lines
3.4M size
78 third party JavaScript source files
@ -11,7 +11,7 @@
2.7M size
58 first party JavaScript source files
18744 lines
18751 lines
724K size
3.1M uncompressed JavaScript size