mirror of
https://github.com/gchq/CyberChef
synced 2025-03-14 05:46:56 +00:00
Tweaks to various hashing functions to improve config options
This commit is contained in:
parent
3ce3866000
commit
1b54584820
11 changed files with 104 additions and 34 deletions
|
@ -13,8 +13,11 @@ All major and minor version changes will be documented in this file. Details of
|
|||
|
||||
## Details
|
||||
|
||||
### [9.24.0] - 2020-02-02
|
||||
- 'SM3' hashing function added along with more configuration options for other hashing operations [@n1073645] [@n1474335] | [#1022]
|
||||
|
||||
### [9.23.0] - 2020-02-01
|
||||
- Various RSA operations added to encrypt, decrypt, sign, verify and generate keys [@mattnotmitt] | [#652]
|
||||
- Various RSA operations added to encrypt, decrypt, sign, verify and generate keys [@mattnotmitt] [@GCHQ77703] | [#652]
|
||||
|
||||
### [9.22.0] - 2021-02-01
|
||||
- 'Unicode Text Format' operation added [@mattnotmitt] | [#1083]
|
||||
|
@ -420,5 +423,6 @@ All major and minor version changes will be documented in this file. Details of
|
|||
[#965]: https://github.com/gchq/CyberChef/pull/965
|
||||
[#966]: https://github.com/gchq/CyberChef/pull/966
|
||||
[#987]: https://github.com/gchq/CyberChef/pull/987
|
||||
[#1022]: https://github.com/gchq/CyberChef/pull/1022
|
||||
[#1049]: https://github.com/gchq/CyberChef/pull/1049
|
||||
[#1083]: https://github.com/gchq/CyberChef/pull/1083
|
|
@ -28,7 +28,9 @@ class HAS160 extends Operation {
|
|||
{
|
||||
name: "Rounds",
|
||||
type: "number",
|
||||
value: 80
|
||||
value: 80,
|
||||
min: 1,
|
||||
max: 80
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
|
@ -28,7 +28,8 @@ class MD2 extends Operation {
|
|||
{
|
||||
name: "Rounds",
|
||||
type: "number",
|
||||
value: 18
|
||||
value: 18,
|
||||
min: 0
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
|
@ -28,7 +28,8 @@ class SHA0 extends Operation {
|
|||
{
|
||||
name: "Rounds",
|
||||
type: "number",
|
||||
value: 80
|
||||
value: 80,
|
||||
min: 16
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
|
@ -28,7 +28,8 @@ class SHA1 extends Operation {
|
|||
{
|
||||
name: "Rounds",
|
||||
type: "number",
|
||||
value: 80
|
||||
value: 80,
|
||||
min: 16
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
|
@ -20,20 +20,58 @@ class SHA2 extends Operation {
|
|||
|
||||
this.name = "SHA2";
|
||||
this.module = "Crypto";
|
||||
this.description = "The SHA-2 (Secure Hash Algorithm 2) hash functions were designed by the NSA. SHA-2 includes significant changes from its predecessor, SHA-1. The SHA-2 family consists of hash functions with digests (hash values) that are 224, 256, 384 or 512 bits: SHA224, SHA256, SHA384, SHA512.<br><br><ul><li>SHA-512 operates on 64-bit words.</li><li>SHA-256 operates on 32-bit words.</li><li>SHA-384 is largely identical to SHA-512 but is truncated to 384 bytes.</li><li>SHA-224 is largely identical to SHA-256 but is truncated to 224 bytes.</li><li>SHA-512/224 and SHA-512/256 are truncated versions of SHA-512, but the initial values are generated using the method described in Federal Information Processing Standards (FIPS) PUB 180-4.</li></ul> The message digest algorithm consists, by default, of 64 rounds.";
|
||||
this.description = "The SHA-2 (Secure Hash Algorithm 2) hash functions were designed by the NSA. SHA-2 includes significant changes from its predecessor, SHA-1. The SHA-2 family consists of hash functions with digests (hash values) that are 224, 256, 384 or 512 bits: SHA224, SHA256, SHA384, SHA512.<br><br><ul><li>SHA-512 operates on 64-bit words.</li><li>SHA-256 operates on 32-bit words.</li><li>SHA-384 is largely identical to SHA-512 but is truncated to 384 bytes.</li><li>SHA-224 is largely identical to SHA-256 but is truncated to 224 bytes.</li><li>SHA-512/224 and SHA-512/256 are truncated versions of SHA-512, but the initial values are generated using the method described in Federal Information Processing Standards (FIPS) PUB 180-4.</li></ul> The message digest algorithm for SHA256 variants consists, by default, of 64 rounds, and for SHA512 variants, it is, by default, 160.";
|
||||
this.infoURL = "https://wikipedia.org/wiki/SHA-2";
|
||||
this.inputType = "ArrayBuffer";
|
||||
this.outputType = "string";
|
||||
this.args = [
|
||||
{
|
||||
"name": "Size",
|
||||
"type": "option",
|
||||
"value": ["512", "256", "384", "224", "512/256", "512/224"]
|
||||
name: "Size",
|
||||
type: "argSelector",
|
||||
value: [
|
||||
{
|
||||
name: "512",
|
||||
on: [2],
|
||||
off: [1]
|
||||
},
|
||||
{
|
||||
name: "384",
|
||||
on: [2],
|
||||
off: [1]
|
||||
},
|
||||
{
|
||||
name: "256",
|
||||
on: [1],
|
||||
off: [2]
|
||||
},
|
||||
{
|
||||
name: "224",
|
||||
on: [1],
|
||||
off: [2]
|
||||
},
|
||||
{
|
||||
name: "512/256",
|
||||
on: [2],
|
||||
off: [1]
|
||||
},
|
||||
{
|
||||
name: "512/224",
|
||||
on: [2],
|
||||
off: [1]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "Rounds",
|
||||
name: "Rounds", // For SHA256 variants
|
||||
type: "number",
|
||||
value: 64
|
||||
value: 64,
|
||||
min: 16
|
||||
},
|
||||
{
|
||||
name: "Rounds", // For SHA512 variants
|
||||
type: "number",
|
||||
value: 160,
|
||||
min: 32
|
||||
}
|
||||
];
|
||||
}
|
||||
|
@ -45,7 +83,8 @@ class SHA2 extends Operation {
|
|||
*/
|
||||
run(input, args) {
|
||||
const size = args[0];
|
||||
return runHash("sha" + size, input, {rounds: args[1]});
|
||||
const rounds = (size === "256" || size === "224") ? args[1] : args[2];
|
||||
return runHash("sha" + size, input, {rounds: rounds});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
|
||||
import Operation from "../Operation.mjs";
|
||||
import Utils from "../Utils.mjs";
|
||||
import Sm3 from "crypto-api/src/hasher/sm3";
|
||||
import {toHex} from "crypto-api/src/encoder/hex";
|
||||
import Sm3 from "crypto-api/src/hasher/sm3.mjs";
|
||||
import {toHex} from "crypto-api/src/encoder/hex.mjs";
|
||||
|
||||
/**
|
||||
* SM3 operation
|
||||
|
@ -35,7 +35,8 @@ class SM3 extends Operation {
|
|||
{
|
||||
name: "Rounds",
|
||||
type: "number",
|
||||
value: 64
|
||||
value: 64,
|
||||
min: 16
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
|
@ -26,14 +26,17 @@ class Snefru extends Operation {
|
|||
this.outputType = "string";
|
||||
this.args = [
|
||||
{
|
||||
"name": "Rounds",
|
||||
"type": "option",
|
||||
"value": ["8", "4", "2"]
|
||||
name: "Size",
|
||||
type: "number",
|
||||
value: 128,
|
||||
min: 32,
|
||||
max: 480,
|
||||
step: 32
|
||||
},
|
||||
{
|
||||
"name": "Size",
|
||||
"type": "option",
|
||||
"value": ["256", "128"]
|
||||
name: "Rounds",
|
||||
type: "option",
|
||||
value: ["8", "4", "2"]
|
||||
}
|
||||
];
|
||||
}
|
||||
|
@ -45,8 +48,8 @@ class Snefru extends Operation {
|
|||
*/
|
||||
run(input, args) {
|
||||
return runHash("snefru", input, {
|
||||
rounds: args[0],
|
||||
length: args[1]
|
||||
length: args[0],
|
||||
rounds: args[1]
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -26,9 +26,16 @@ class Whirlpool extends Operation {
|
|||
this.outputType = "string";
|
||||
this.args = [
|
||||
{
|
||||
"name": "Variant",
|
||||
"type": "option",
|
||||
"value": ["Whirlpool", "Whirlpool-T", "Whirlpool-0"]
|
||||
name: "Variant",
|
||||
type: "option",
|
||||
value: ["Whirlpool", "Whirlpool-T", "Whirlpool-0"]
|
||||
},
|
||||
{
|
||||
name: "Rounds",
|
||||
type: "number",
|
||||
value: 10,
|
||||
min: 1,
|
||||
max: 10
|
||||
}
|
||||
];
|
||||
}
|
||||
|
@ -40,7 +47,7 @@ class Whirlpool extends Operation {
|
|||
*/
|
||||
run(input, args) {
|
||||
const variant = args[0].toLowerCase();
|
||||
return runHash(variant, input);
|
||||
return runHash(variant, input, {rounds: args[1]});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -854,7 +854,7 @@ pCGTErs=
|
|||
|
||||
it("Snefru", () => {
|
||||
assert.strictEqual(
|
||||
chef.snefru("demeaning milestone").toString(),
|
||||
chef.snefru("demeaning milestone", {size: 256, rounds: 8}).toString(),
|
||||
"a671b48770fe073ce49e9259cc2f47d345a53712639f8ae23c5ad3fec19540a5");
|
||||
}),
|
||||
|
||||
|
|
|
@ -345,7 +345,7 @@ TestRegister.addTests([
|
|||
recipeConfig: [
|
||||
{
|
||||
"op": "Snefru",
|
||||
"args": ["2", "128"]
|
||||
"args": ["128", "2"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -356,7 +356,7 @@ TestRegister.addTests([
|
|||
recipeConfig: [
|
||||
{
|
||||
"op": "Snefru",
|
||||
"args": ["4", "128"]
|
||||
"args": ["128", "4"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -367,7 +367,7 @@ TestRegister.addTests([
|
|||
recipeConfig: [
|
||||
{
|
||||
"op": "Snefru",
|
||||
"args": ["8", "128"]
|
||||
"args": ["128", "8"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -378,7 +378,7 @@ TestRegister.addTests([
|
|||
recipeConfig: [
|
||||
{
|
||||
"op": "Snefru",
|
||||
"args": ["2", "256"]
|
||||
"args": ["256", "2"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -389,7 +389,7 @@ TestRegister.addTests([
|
|||
recipeConfig: [
|
||||
{
|
||||
"op": "Snefru",
|
||||
"args": ["4", "256"]
|
||||
"args": ["256", "4"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -400,7 +400,18 @@ TestRegister.addTests([
|
|||
recipeConfig: [
|
||||
{
|
||||
"op": "Snefru",
|
||||
"args": ["8", "256"]
|
||||
"args": ["256", "8"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "SM3 256 64",
|
||||
input: "Hello, World!",
|
||||
expectedOutput: "7ed26cbf0bee4ca7d55c1e64714c4aa7d1f163089ef5ceb603cd102c81fbcbc5",
|
||||
recipeConfig: [
|
||||
{
|
||||
"op": "SM3",
|
||||
"args": ["256", "64"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
Loading…
Add table
Reference in a new issue