This commit is contained in:
Michael Rowley 2022-03-29 14:31:03 +02:00 committed by GitHub
commit 7b190ad142
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 504 additions and 135 deletions

View file

@ -90,6 +90,11 @@ class AESDecrypt extends Operation {
"type": "toggleString", "type": "toggleString",
"value": "", "value": "",
"toggleValues": ["Hex", "UTF8", "Latin1", "Base64"] "toggleValues": ["Hex", "UTF8", "Latin1", "Base64"]
},
{
"name": "Key Padding",
"type": "option",
"value": ["None", "Null", "Repeat"]
} }
]; ];
} }
@ -102,15 +107,30 @@ class AESDecrypt extends Operation {
* @throws {OperationError} if cannot decrypt input or invalid key length * @throws {OperationError} if cannot decrypt input or invalid key length
*/ */
run(input, args) { run(input, args) {
const key = Utils.convertToByteString(args[0].string, args[0].option), var key = Utils.convertToByteString(args[0].string, args[0].option);
iv = Utils.convertToByteString(args[1].string, args[1].option), const iv = Utils.convertToByteString(args[1].string, args[1].option),
mode = args[2], mode = args[2],
inputType = args[3], inputType = args[3],
outputType = args[4], outputType = args[4],
gcmTag = Utils.convertToByteString(args[5].string, args[5].option), gcmTag = Utils.convertToByteString(args[5].string, args[5].option),
aad = Utils.convertToByteString(args[6].string, args[6].option); aad = Utils.convertToByteString(args[6].string, args[6].option),
keyPadding = args[7],
keySizes = [16, 24, 32];
if ([16, 24, 32].indexOf(key.length) < 0) { if (keyPadding !== "None") {
var targetKeySize = 0;
for (var i = 0; i < keySizes.length; i++) {
if (key.length < keySizes[i]) {
targetKeySize = keySizes[i];
break;
}
}
if (targetKeySize !== 0) {
key = key.padEnd(targetKeySize, keyPadding == "Null" ? "\0" : key);
}
}
if (keySizes.indexOf(key.length) < 0) {
throw new OperationError(`Invalid key length: ${key.length} bytes throw new OperationError(`Invalid key length: ${key.length} bytes
The following algorithms will be used based on the size of the key: The following algorithms will be used based on the size of the key:

View file

@ -84,6 +84,11 @@ class AESEncrypt extends Operation {
"type": "toggleString", "type": "toggleString",
"value": "", "value": "",
"toggleValues": ["Hex", "UTF8", "Latin1", "Base64"] "toggleValues": ["Hex", "UTF8", "Latin1", "Base64"]
},
{
"name": "Key Padding",
"type": "option",
"value": ["None", "Null", "Repeat"]
} }
]; ];
} }
@ -96,14 +101,29 @@ class AESEncrypt extends Operation {
* @throws {OperationError} if invalid key length * @throws {OperationError} if invalid key length
*/ */
run(input, args) { run(input, args) {
const key = Utils.convertToByteString(args[0].string, args[0].option), var key = Utils.convertToByteString(args[0].string, args[0].option);
iv = Utils.convertToByteString(args[1].string, args[1].option), const iv = Utils.convertToByteString(args[1].string, args[1].option),
mode = args[2], mode = args[2],
inputType = args[3], inputType = args[3],
outputType = args[4], outputType = args[4],
aad = Utils.convertToByteString(args[5].string, args[5].option); aad = Utils.convertToByteString(args[5].string, args[5].option),
keyPadding = args[6],
keySizes = [16, 24, 32];
if ([16, 24, 32].indexOf(key.length) < 0) { if (keyPadding !== "None") {
var targetKeySize = 0;
for (var i = 0; i < keySizes.length; i++) {
if (key.length < keySizes[i]) {
targetKeySize = keySizes[i];
break;
}
}
if (targetKeySize !== 0) {
key = key.padEnd(targetKeySize, keyPadding === "Null" ? "\0" : key);
}
}
if (keySizes.indexOf(key.length) < 0) {
throw new OperationError(`Invalid key length: ${key.length} bytes throw new OperationError(`Invalid key length: ${key.length} bytes
The following algorithms will be used based on the size of the key: The following algorithms will be used based on the size of the key:
@ -113,7 +133,6 @@ The following algorithms will be used based on the size of the key:
} }
input = Utils.convertToByteString(input, inputType); input = Utils.convertToByteString(input, inputType);
const cipher = forge.cipher.createCipher("AES-" + mode, key); const cipher = forge.cipher.createCipher("AES-" + mode, key);
cipher.start({ cipher.start({
iv: iv, iv: iv,

View file

@ -54,6 +54,11 @@ class BlowfishDecrypt extends Operation {
"name": "Output", "name": "Output",
"type": "option", "type": "option",
"value": ["Raw", "Hex"] "value": ["Raw", "Hex"]
},
{
"name": "Key Padding",
"type": "option",
"value": ["None", "Null", "Repeat"]
} }
]; ];
} }
@ -64,11 +69,16 @@ class BlowfishDecrypt extends Operation {
* @returns {string} * @returns {string}
*/ */
run(input, args) { run(input, args) {
const key = Utils.convertToByteString(args[0].string, args[0].option), var key = Utils.convertToByteString(args[0].string, args[0].option);
iv = Utils.convertToByteString(args[1].string, args[1].option), const iv = Utils.convertToByteString(args[1].string, args[1].option),
mode = args[2], mode = args[2],
inputType = args[3], inputType = args[3],
outputType = args[4]; outputType = args[4],
keyPadding = args[5];
if (keyPadding !== "None" && key.length < 8) {
key = key.padEnd(8, keyPadding === "Null" ? "\0" : key);
}
if (key.length !== 8) { if (key.length !== 8) {
throw new OperationError(`Invalid key length: ${key.length} bytes throw new OperationError(`Invalid key length: ${key.length} bytes

View file

@ -54,6 +54,11 @@ class BlowfishEncrypt extends Operation {
"name": "Output", "name": "Output",
"type": "option", "type": "option",
"value": ["Hex", "Raw"] "value": ["Hex", "Raw"]
},
{
"name": "Key Padding",
"type": "option",
"value": ["None", "Null", "Repeat"]
} }
]; ];
} }
@ -64,11 +69,16 @@ class BlowfishEncrypt extends Operation {
* @returns {string} * @returns {string}
*/ */
run(input, args) { run(input, args) {
const key = Utils.convertToByteString(args[0].string, args[0].option), var key = Utils.convertToByteString(args[0].string, args[0].option);
iv = Utils.convertToByteString(args[1].string, args[1].option), const iv = Utils.convertToByteString(args[1].string, args[1].option),
mode = args[2], mode = args[2],
inputType = args[3], inputType = args[3],
outputType = args[4]; outputType = args[4],
keyPadding = args[5];
if (keyPadding !== "None" && key.length < 8) {
key = key.padEnd(8, keyPadding === "Null" ? "\0" : key);
}
if (key.length !== 8) { if (key.length !== 8) {
throw new OperationError(`Invalid key length: ${key.length} bytes throw new OperationError(`Invalid key length: ${key.length} bytes

View file

@ -53,6 +53,11 @@ class DESDecrypt extends Operation {
"name": "Output", "name": "Output",
"type": "option", "type": "option",
"value": ["Raw", "Hex"] "value": ["Raw", "Hex"]
},
{
"name": "Key Padding",
"type": "option",
"value": ["None", "Null", "Repeat"]
} }
]; ];
} }
@ -63,9 +68,13 @@ class DESDecrypt extends Operation {
* @returns {string} * @returns {string}
*/ */
run(input, args) { run(input, args) {
const key = Utils.convertToByteString(args[0].string, args[0].option), var key = Utils.convertToByteString(args[0].string, args[0].option);
iv = Utils.convertToByteArray(args[1].string, args[1].option), var iv = Utils.convertToByteArray(args[1].string, args[1].option),
[,, mode, inputType, outputType] = args; [,, mode, inputType, outputType, keyPadding] = args;
if (keyPadding !== "None" && key.length < 8) {
key = key.padEnd(8, keyPadding == "Null" ? "\0" : key);
}
if (key.length !== 8) { if (key.length !== 8) {
throw new OperationError(`Invalid key length: ${key.length} bytes throw new OperationError(`Invalid key length: ${key.length} bytes

View file

@ -53,6 +53,11 @@ class DESEncrypt extends Operation {
"name": "Output", "name": "Output",
"type": "option", "type": "option",
"value": ["Hex", "Raw"] "value": ["Hex", "Raw"]
},
{
"name": "Key Padding",
"type": "option",
"value": ["None", "Null", "Repeat"]
} }
]; ];
} }
@ -63,9 +68,13 @@ class DESEncrypt extends Operation {
* @returns {string} * @returns {string}
*/ */
run(input, args) { run(input, args) {
const key = Utils.convertToByteString(args[0].string, args[0].option), var key = Utils.convertToByteString(args[0].string, args[0].option);
iv = Utils.convertToByteArray(args[1].string, args[1].option), const iv = Utils.convertToByteArray(args[1].string, args[1].option),
[,, mode, inputType, outputType] = args; [,, mode, inputType, outputType, keyPadding] = args;
if (keyPadding !== "None" && key.length < 8) {
key = key.padEnd(8, keyPadding == "Null" ? "\0" : key);
}
if (key.length !== 8) { if (key.length !== 8) {
throw new OperationError(`Invalid key length: ${key.length} bytes throw new OperationError(`Invalid key length: ${key.length} bytes

View file

@ -53,6 +53,11 @@ class TripleDESDecrypt extends Operation {
"name": "Output", "name": "Output",
"type": "option", "type": "option",
"value": ["Raw", "Hex"] "value": ["Raw", "Hex"]
},
{
"name": "Key Padding",
"type": "option",
"value": ["None", "Null", "Repeat"]
} }
]; ];
} }
@ -63,11 +68,16 @@ class TripleDESDecrypt extends Operation {
* @returns {string} * @returns {string}
*/ */
run(input, args) { run(input, args) {
const key = Utils.convertToByteString(args[0].string, args[0].option), var key = Utils.convertToByteString(args[0].string, args[0].option);
iv = Utils.convertToByteArray(args[1].string, args[1].option), const iv = Utils.convertToByteArray(args[1].string, args[1].option),
mode = args[2], mode = args[2],
inputType = args[3], inputType = args[3],
outputType = args[4]; outputType = args[4],
keyPadding = args[5];
if (keyPadding !== "None" && key.length < 24) {
key = key.padEnd(24, keyPadding === "Null" ? "\0" : key);
}
if (key.length !== 24) { if (key.length !== 24) {
throw new OperationError(`Invalid key length: ${key.length} bytes throw new OperationError(`Invalid key length: ${key.length} bytes

View file

@ -53,6 +53,11 @@ class TripleDESEncrypt extends Operation {
"name": "Output", "name": "Output",
"type": "option", "type": "option",
"value": ["Hex", "Raw"] "value": ["Hex", "Raw"]
},
{
"name": "Key Padding",
"type": "option",
"value": ["None", "Null", "Repeat"]
} }
]; ];
} }
@ -63,11 +68,16 @@ class TripleDESEncrypt extends Operation {
* @returns {string} * @returns {string}
*/ */
run(input, args) { run(input, args) {
const key = Utils.convertToByteString(args[0].string, args[0].option), var key = Utils.convertToByteString(args[0].string, args[0].option);
iv = Utils.convertToByteArray(args[1].string, args[1].option), const iv = Utils.convertToByteArray(args[1].string, args[1].option),
mode = args[2], mode = args[2],
inputType = args[3], inputType = args[3],
outputType = args[4]; outputType = args[4],
keyPadding = args[5];
if (keyPadding !== "None" && key.length < 24) {
key = key.padEnd(24, keyPadding === "Null" ? "\0" : key);
}
if (key.length !== 24) { if (key.length !== 24) {
throw new OperationError(`Invalid key length: ${key.length} bytes throw new OperationError(`Invalid key length: ${key.length} bytes

File diff suppressed because it is too large Load diff

View file

@ -67,7 +67,8 @@ TestRegister.addTests([
{ {
"option": "Hex", "option": "Hex",
"string": "" "string": ""
} },
"None"
] ]
} }
] ]