mirror of
https://github.com/gchq/CyberChef.git
synced 2025-04-20 14:56:19 -04: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
|
## 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
|
### [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
|
### [9.22.0] - 2021-02-01
|
||||||
- 'Unicode Text Format' operation added [@mattnotmitt] | [#1083]
|
- '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
|
[#965]: https://github.com/gchq/CyberChef/pull/965
|
||||||
[#966]: https://github.com/gchq/CyberChef/pull/966
|
[#966]: https://github.com/gchq/CyberChef/pull/966
|
||||||
[#987]: https://github.com/gchq/CyberChef/pull/987
|
[#987]: https://github.com/gchq/CyberChef/pull/987
|
||||||
|
[#1022]: https://github.com/gchq/CyberChef/pull/1022
|
||||||
[#1049]: https://github.com/gchq/CyberChef/pull/1049
|
[#1049]: https://github.com/gchq/CyberChef/pull/1049
|
||||||
[#1083]: https://github.com/gchq/CyberChef/pull/1083
|
[#1083]: https://github.com/gchq/CyberChef/pull/1083
|
|
@ -28,7 +28,9 @@ class HAS160 extends Operation {
|
||||||
{
|
{
|
||||||
name: "Rounds",
|
name: "Rounds",
|
||||||
type: "number",
|
type: "number",
|
||||||
value: 80
|
value: 80,
|
||||||
|
min: 1,
|
||||||
|
max: 80
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,8 @@ class MD2 extends Operation {
|
||||||
{
|
{
|
||||||
name: "Rounds",
|
name: "Rounds",
|
||||||
type: "number",
|
type: "number",
|
||||||
value: 18
|
value: 18,
|
||||||
|
min: 0
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,8 @@ class SHA0 extends Operation {
|
||||||
{
|
{
|
||||||
name: "Rounds",
|
name: "Rounds",
|
||||||
type: "number",
|
type: "number",
|
||||||
value: 80
|
value: 80,
|
||||||
|
min: 16
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,8 @@ class SHA1 extends Operation {
|
||||||
{
|
{
|
||||||
name: "Rounds",
|
name: "Rounds",
|
||||||
type: "number",
|
type: "number",
|
||||||
value: 80
|
value: 80,
|
||||||
|
min: 16
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,20 +20,58 @@ class SHA2 extends Operation {
|
||||||
|
|
||||||
this.name = "SHA2";
|
this.name = "SHA2";
|
||||||
this.module = "Crypto";
|
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.infoURL = "https://wikipedia.org/wiki/SHA-2";
|
||||||
this.inputType = "ArrayBuffer";
|
this.inputType = "ArrayBuffer";
|
||||||
this.outputType = "string";
|
this.outputType = "string";
|
||||||
this.args = [
|
this.args = [
|
||||||
{
|
{
|
||||||
"name": "Size",
|
name: "Size",
|
||||||
"type": "option",
|
type: "argSelector",
|
||||||
"value": ["512", "256", "384", "224", "512/256", "512/224"]
|
value: [
|
||||||
|
{
|
||||||
|
name: "512",
|
||||||
|
on: [2],
|
||||||
|
off: [1]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Rounds",
|
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", // For SHA256 variants
|
||||||
type: "number",
|
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) {
|
run(input, args) {
|
||||||
const size = args[0];
|
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 Operation from "../Operation.mjs";
|
||||||
import Utils from "../Utils.mjs";
|
import Utils from "../Utils.mjs";
|
||||||
import Sm3 from "crypto-api/src/hasher/sm3";
|
import Sm3 from "crypto-api/src/hasher/sm3.mjs";
|
||||||
import {toHex} from "crypto-api/src/encoder/hex";
|
import {toHex} from "crypto-api/src/encoder/hex.mjs";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SM3 operation
|
* SM3 operation
|
||||||
|
@ -35,7 +35,8 @@ class SM3 extends Operation {
|
||||||
{
|
{
|
||||||
name: "Rounds",
|
name: "Rounds",
|
||||||
type: "number",
|
type: "number",
|
||||||
value: 64
|
value: 64,
|
||||||
|
min: 16
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,14 +26,17 @@ class Snefru extends Operation {
|
||||||
this.outputType = "string";
|
this.outputType = "string";
|
||||||
this.args = [
|
this.args = [
|
||||||
{
|
{
|
||||||
"name": "Rounds",
|
name: "Size",
|
||||||
"type": "option",
|
type: "number",
|
||||||
"value": ["8", "4", "2"]
|
value: 128,
|
||||||
|
min: 32,
|
||||||
|
max: 480,
|
||||||
|
step: 32
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Size",
|
name: "Rounds",
|
||||||
"type": "option",
|
type: "option",
|
||||||
"value": ["256", "128"]
|
value: ["8", "4", "2"]
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -45,8 +48,8 @@ class Snefru extends Operation {
|
||||||
*/
|
*/
|
||||||
run(input, args) {
|
run(input, args) {
|
||||||
return runHash("snefru", input, {
|
return runHash("snefru", input, {
|
||||||
rounds: args[0],
|
length: args[0],
|
||||||
length: args[1]
|
rounds: args[1]
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,9 +26,16 @@ class Whirlpool extends Operation {
|
||||||
this.outputType = "string";
|
this.outputType = "string";
|
||||||
this.args = [
|
this.args = [
|
||||||
{
|
{
|
||||||
"name": "Variant",
|
name: "Variant",
|
||||||
"type": "option",
|
type: "option",
|
||||||
"value": ["Whirlpool", "Whirlpool-T", "Whirlpool-0"]
|
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) {
|
run(input, args) {
|
||||||
const variant = args[0].toLowerCase();
|
const variant = args[0].toLowerCase();
|
||||||
return runHash(variant, input);
|
return runHash(variant, input, {rounds: args[1]});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -854,7 +854,7 @@ pCGTErs=
|
||||||
|
|
||||||
it("Snefru", () => {
|
it("Snefru", () => {
|
||||||
assert.strictEqual(
|
assert.strictEqual(
|
||||||
chef.snefru("demeaning milestone").toString(),
|
chef.snefru("demeaning milestone", {size: 256, rounds: 8}).toString(),
|
||||||
"a671b48770fe073ce49e9259cc2f47d345a53712639f8ae23c5ad3fec19540a5");
|
"a671b48770fe073ce49e9259cc2f47d345a53712639f8ae23c5ad3fec19540a5");
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
|
|
@ -345,7 +345,7 @@ TestRegister.addTests([
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
"op": "Snefru",
|
"op": "Snefru",
|
||||||
"args": ["2", "128"]
|
"args": ["128", "2"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -356,7 +356,7 @@ TestRegister.addTests([
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
"op": "Snefru",
|
"op": "Snefru",
|
||||||
"args": ["4", "128"]
|
"args": ["128", "4"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -367,7 +367,7 @@ TestRegister.addTests([
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
"op": "Snefru",
|
"op": "Snefru",
|
||||||
"args": ["8", "128"]
|
"args": ["128", "8"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -378,7 +378,7 @@ TestRegister.addTests([
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
"op": "Snefru",
|
"op": "Snefru",
|
||||||
"args": ["2", "256"]
|
"args": ["256", "2"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -389,7 +389,7 @@ TestRegister.addTests([
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
"op": "Snefru",
|
"op": "Snefru",
|
||||||
"args": ["4", "256"]
|
"args": ["256", "4"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -400,7 +400,18 @@ TestRegister.addTests([
|
||||||
recipeConfig: [
|
recipeConfig: [
|
||||||
{
|
{
|
||||||
"op": "Snefru",
|
"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
Add a link
Reference in a new issue