cyberchef 9.47.0 → 9.47.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cyberchef",
3
- "version": "9.47.0",
3
+ "version": "9.47.2",
4
4
  "description": "The Cyber Swiss Army Knife for encryption, encoding, compression and data analysis.",
5
5
  "author": "n1474335 <n1474335@gmail.com>",
6
6
  "homepage": "https://gchq.github.io/CyberChef",
@@ -3584,10 +3584,27 @@
3584
3584
  "value": [
3585
3585
  "A",
3586
3586
  "AAAA",
3587
- "TXT",
3588
- "MX",
3587
+ "ANAME",
3588
+ "CERT",
3589
+ "CNAME",
3589
3590
  "DNSKEY",
3590
- "NS"
3591
+ "HTTPS",
3592
+ "IPSECKEY",
3593
+ "LOC",
3594
+ "MX",
3595
+ "NS",
3596
+ "OPENPGPKEY",
3597
+ "PTR",
3598
+ "RRSIG",
3599
+ "SIG",
3600
+ "SOA",
3601
+ "SPF",
3602
+ "SRV",
3603
+ "SSHFP",
3604
+ "TA",
3605
+ "TXT",
3606
+ "URI",
3607
+ "ANY"
3591
3608
  ]
3592
3609
  },
3593
3610
  {
@@ -6731,7 +6748,27 @@
6731
6748
  "outputType": "string",
6732
6749
  "flowControl": false,
6733
6750
  "manualBake": false,
6734
- "args": []
6751
+ "args": [
6752
+ {
6753
+ "name": "Length (bits)",
6754
+ "type": "option",
6755
+ "value": [
6756
+ "All",
6757
+ "128",
6758
+ "160",
6759
+ "224",
6760
+ "256",
6761
+ "320",
6762
+ "384",
6763
+ "512"
6764
+ ]
6765
+ },
6766
+ {
6767
+ "name": "Include names",
6768
+ "type": "boolean",
6769
+ "value": true
6770
+ }
6771
+ ]
6735
6772
  },
6736
6773
  "Generate HOTP": {
6737
6774
  "module": "Default",
@@ -51,10 +51,27 @@ class DNSOverHTTPS extends Operation {
51
51
  value: [
52
52
  "A",
53
53
  "AAAA",
54
- "TXT",
55
- "MX",
54
+ "ANAME",
55
+ "CERT",
56
+ "CNAME",
56
57
  "DNSKEY",
57
- "NS"
58
+ "HTTPS",
59
+ "IPSECKEY",
60
+ "LOC",
61
+ "MX",
62
+ "NS",
63
+ "OPENPGPKEY",
64
+ "PTR",
65
+ "RRSIG",
66
+ "SIG",
67
+ "SOA",
68
+ "SPF",
69
+ "SRV",
70
+ "SSHFP",
71
+ "TA",
72
+ "TXT",
73
+ "URI",
74
+ "ANY"
58
75
  ]
59
76
  },
60
77
  {
@@ -1,5 +1,6 @@
1
1
  /**
2
2
  * @author n1474335 [n1474335@gmail.com]
3
+ * @author john19696 [john19696@protonmail.com]
3
4
  * @copyright Crown Copyright 2016
4
5
  * @license Apache-2.0
5
6
  */
@@ -33,6 +34,7 @@ import BLAKE2b from "./BLAKE2b.mjs";
33
34
  import BLAKE2s from "./BLAKE2s.mjs";
34
35
  import Streebog from "./Streebog.mjs";
35
36
  import GOSTHash from "./GOSTHash.mjs";
37
+ import OperationError from "../errors/OperationError.mjs";
36
38
 
37
39
  /**
38
40
  * Generate all hashes operation
@@ -51,7 +53,73 @@ class GenerateAllHashes extends Operation {
51
53
  this.infoURL = "https://wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions";
52
54
  this.inputType = "ArrayBuffer";
53
55
  this.outputType = "string";
54
- this.args = [];
56
+ this.args = [
57
+ {
58
+ name: "Length (bits)",
59
+ type: "option",
60
+ value: [
61
+ "All", "128", "160", "224", "256", "320", "384", "512"
62
+ ]
63
+ },
64
+ {
65
+ name: "Include names",
66
+ type: "boolean",
67
+ value: true
68
+ },
69
+ ];
70
+ this.hashes = [
71
+ {name: "MD2", algo: (new MD2()), inputType: "arrayBuffer", params: []},
72
+ {name: "MD4", algo: (new MD4()), inputType: "arrayBuffer", params: []},
73
+ {name: "MD5", algo: (new MD5()), inputType: "arrayBuffer", params: []},
74
+ {name: "MD6", algo: (new MD6()), inputType: "str", params: []},
75
+ {name: "SHA0", algo: (new SHA0()), inputType: "arrayBuffer", params: []},
76
+ {name: "SHA1", algo: (new SHA1()), inputType: "arrayBuffer", params: []},
77
+ {name: "SHA2 224", algo: (new SHA2()), inputType: "arrayBuffer", params: ["224"]},
78
+ {name: "SHA2 256", algo: (new SHA2()), inputType: "arrayBuffer", params: ["256"]},
79
+ {name: "SHA2 384", algo: (new SHA2()), inputType: "arrayBuffer", params: ["384"]},
80
+ {name: "SHA2 512", algo: (new SHA2()), inputType: "arrayBuffer", params: ["512"]},
81
+ {name: "SHA3 224", algo: (new SHA3()), inputType: "arrayBuffer", params: ["224"]},
82
+ {name: "SHA3 256", algo: (new SHA3()), inputType: "arrayBuffer", params: ["256"]},
83
+ {name: "SHA3 384", algo: (new SHA3()), inputType: "arrayBuffer", params: ["384"]},
84
+ {name: "SHA3 512", algo: (new SHA3()), inputType: "arrayBuffer", params: ["512"]},
85
+ {name: "Keccak 224", algo: (new Keccak()), inputType: "arrayBuffer", params: ["224"]},
86
+ {name: "Keccak 256", algo: (new Keccak()), inputType: "arrayBuffer", params: ["256"]},
87
+ {name: "Keccak 384", algo: (new Keccak()), inputType: "arrayBuffer", params: ["384"]},
88
+ {name: "Keccak 512", algo: (new Keccak()), inputType: "arrayBuffer", params: ["512"]},
89
+ {name: "Shake 128", algo: (new Shake()), inputType: "arrayBuffer", params: ["128", 256]},
90
+ {name: "Shake 256", algo: (new Shake()), inputType: "arrayBuffer", params: ["256", 512]},
91
+ {name: "RIPEMD-128", algo: (new RIPEMD()), inputType: "arrayBuffer", params: ["128"]},
92
+ {name: "RIPEMD-160", algo: (new RIPEMD()), inputType: "arrayBuffer", params: ["160"]},
93
+ {name: "RIPEMD-256", algo: (new RIPEMD()), inputType: "arrayBuffer", params: ["256"]},
94
+ {name: "RIPEMD-320", algo: (new RIPEMD()), inputType: "arrayBuffer", params: ["320"]},
95
+ {name: "HAS-160", algo: (new HAS160()), inputType: "arrayBuffer", params: []},
96
+ {name: "Whirlpool-0", algo: (new Whirlpool()), inputType: "arrayBuffer", params: ["Whirlpool-0"]},
97
+ {name: "Whirlpool-T", algo: (new Whirlpool()), inputType: "arrayBuffer", params: ["Whirlpool-T"]},
98
+ {name: "Whirlpool", algo: (new Whirlpool()), inputType: "arrayBuffer", params: ["Whirlpool"]},
99
+ {name: "BLAKE2b-128", algo: (new BLAKE2b), inputType: "arrayBuffer", params: ["128", "Hex", {string: "", option: "UTF8"}]},
100
+ {name: "BLAKE2b-160", algo: (new BLAKE2b), inputType: "arrayBuffer", params: ["160", "Hex", {string: "", option: "UTF8"}]},
101
+ {name: "BLAKE2b-256", algo: (new BLAKE2b), inputType: "arrayBuffer", params: ["256", "Hex", {string: "", option: "UTF8"}]},
102
+ {name: "BLAKE2b-384", algo: (new BLAKE2b), inputType: "arrayBuffer", params: ["384", "Hex", {string: "", option: "UTF8"}]},
103
+ {name: "BLAKE2b-512", algo: (new BLAKE2b), inputType: "arrayBuffer", params: ["512", "Hex", {string: "", option: "UTF8"}]},
104
+ {name: "BLAKE2s-128", algo: (new BLAKE2s), inputType: "arrayBuffer", params: ["128", "Hex", {string: "", option: "UTF8"}]},
105
+ {name: "BLAKE2s-160", algo: (new BLAKE2s), inputType: "arrayBuffer", params: ["160", "Hex", {string: "", option: "UTF8"}]},
106
+ {name: "BLAKE2s-256", algo: (new BLAKE2s), inputType: "arrayBuffer", params: ["256", "Hex", {string: "", option: "UTF8"}]},
107
+ {name: "Streebog-256", algo: (new Streebog), inputType: "arrayBuffer", params: ["256"]},
108
+ {name: "Streebog-512", algo: (new Streebog), inputType: "arrayBuffer", params: ["512"]},
109
+ {name: "GOST", algo: (new GOSTHash), inputType: "arrayBuffer", params: ["D-A"]},
110
+ {name: "SSDEEP", algo: (new SSDEEP()), inputType: "str"},
111
+ {name: "CTPH", algo: (new CTPH()), inputType: "str"}
112
+ ];
113
+ this.checksums = [
114
+ {name: "Fletcher-8", algo: (new Fletcher8Checksum), inputType: "byteArray", params: []},
115
+ {name: "Fletcher-16", algo: (new Fletcher16Checksum), inputType: "byteArray", params: []},
116
+ {name: "Fletcher-32", algo: (new Fletcher32Checksum), inputType: "byteArray", params: []},
117
+ {name: "Fletcher-64", algo: (new Fletcher64Checksum), inputType: "byteArray", params: []},
118
+ {name: "Adler-32", algo: (new Adler32Checksum), inputType: "byteArray", params: []},
119
+ {name: "CRC-8", algo: (new CRC8Checksum), inputType: "arrayBuffer", params: ["CRC-8"]},
120
+ {name: "CRC-16", algo: (new CRC16Checksum), inputType: "arrayBuffer", params: []},
121
+ {name: "CRC-32", algo: (new CRC32Checksum), inputType: "arrayBuffer", params: []}
122
+ ];
55
123
  }
56
124
 
57
125
  /**
@@ -60,63 +128,74 @@ class GenerateAllHashes extends Operation {
60
128
  * @returns {string}
61
129
  */
62
130
  run(input, args) {
63
- const arrayBuffer = input,
64
- str = Utils.arrayBufferToStr(arrayBuffer, false),
65
- byteArray = new Uint8Array(arrayBuffer),
66
- output = "MD2: " + (new MD2()).run(arrayBuffer, []) +
67
- "\nMD4: " + (new MD4()).run(arrayBuffer, []) +
68
- "\nMD5: " + (new MD5()).run(arrayBuffer, []) +
69
- "\nMD6: " + (new MD6()).run(str, []) +
70
- "\nSHA0: " + (new SHA0()).run(arrayBuffer, []) +
71
- "\nSHA1: " + (new SHA1()).run(arrayBuffer, []) +
72
- "\nSHA2 224: " + (new SHA2()).run(arrayBuffer, ["224"]) +
73
- "\nSHA2 256: " + (new SHA2()).run(arrayBuffer, ["256"]) +
74
- "\nSHA2 384: " + (new SHA2()).run(arrayBuffer, ["384"]) +
75
- "\nSHA2 512: " + (new SHA2()).run(arrayBuffer, ["512"]) +
76
- "\nSHA3 224: " + (new SHA3()).run(arrayBuffer, ["224"]) +
77
- "\nSHA3 256: " + (new SHA3()).run(arrayBuffer, ["256"]) +
78
- "\nSHA3 384: " + (new SHA3()).run(arrayBuffer, ["384"]) +
79
- "\nSHA3 512: " + (new SHA3()).run(arrayBuffer, ["512"]) +
80
- "\nKeccak 224: " + (new Keccak()).run(arrayBuffer, ["224"]) +
81
- "\nKeccak 256: " + (new Keccak()).run(arrayBuffer, ["256"]) +
82
- "\nKeccak 384: " + (new Keccak()).run(arrayBuffer, ["384"]) +
83
- "\nKeccak 512: " + (new Keccak()).run(arrayBuffer, ["512"]) +
84
- "\nShake 128: " + (new Shake()).run(arrayBuffer, ["128", 256]) +
85
- "\nShake 256: " + (new Shake()).run(arrayBuffer, ["256", 512]) +
86
- "\nRIPEMD-128: " + (new RIPEMD()).run(arrayBuffer, ["128"]) +
87
- "\nRIPEMD-160: " + (new RIPEMD()).run(arrayBuffer, ["160"]) +
88
- "\nRIPEMD-256: " + (new RIPEMD()).run(arrayBuffer, ["256"]) +
89
- "\nRIPEMD-320: " + (new RIPEMD()).run(arrayBuffer, ["320"]) +
90
- "\nHAS-160: " + (new HAS160()).run(arrayBuffer, []) +
91
- "\nWhirlpool-0: " + (new Whirlpool()).run(arrayBuffer, ["Whirlpool-0"]) +
92
- "\nWhirlpool-T: " + (new Whirlpool()).run(arrayBuffer, ["Whirlpool-T"]) +
93
- "\nWhirlpool: " + (new Whirlpool()).run(arrayBuffer, ["Whirlpool"]) +
94
- "\nBLAKE2b-128: " + (new BLAKE2b).run(arrayBuffer, ["128", "Hex", {string: "", option: "UTF8"}]) +
95
- "\nBLAKE2b-160: " + (new BLAKE2b).run(arrayBuffer, ["160", "Hex", {string: "", option: "UTF8"}]) +
96
- "\nBLAKE2b-256: " + (new BLAKE2b).run(arrayBuffer, ["256", "Hex", {string: "", option: "UTF8"}]) +
97
- "\nBLAKE2b-384: " + (new BLAKE2b).run(arrayBuffer, ["384", "Hex", {string: "", option: "UTF8"}]) +
98
- "\nBLAKE2b-512: " + (new BLAKE2b).run(arrayBuffer, ["512", "Hex", {string: "", option: "UTF8"}]) +
99
- "\nBLAKE2s-128: " + (new BLAKE2s).run(arrayBuffer, ["128", "Hex", {string: "", option: "UTF8"}]) +
100
- "\nBLAKE2s-160: " + (new BLAKE2s).run(arrayBuffer, ["160", "Hex", {string: "", option: "UTF8"}]) +
101
- "\nBLAKE2s-256: " + (new BLAKE2s).run(arrayBuffer, ["256", "Hex", {string: "", option: "UTF8"}]) +
102
- "\nStreebog-256: " + (new Streebog).run(arrayBuffer, ["256"]) +
103
- "\nStreebog-512: " + (new Streebog).run(arrayBuffer, ["512"]) +
104
- "\nGOST: " + (new GOSTHash).run(arrayBuffer, ["D-A"]) +
105
- "\nSSDEEP: " + (new SSDEEP()).run(str) +
106
- "\nCTPH: " + (new CTPH()).run(str) +
107
- "\n\nChecksums:" +
108
- "\nFletcher-8: " + (new Fletcher8Checksum).run(byteArray, []) +
109
- "\nFletcher-16: " + (new Fletcher16Checksum).run(byteArray, []) +
110
- "\nFletcher-32: " + (new Fletcher32Checksum).run(byteArray, []) +
111
- "\nFletcher-64: " + (new Fletcher64Checksum).run(byteArray, []) +
112
- "\nAdler-32: " + (new Adler32Checksum).run(byteArray, []) +
113
- "\nCRC-8: " + (new CRC8Checksum).run(arrayBuffer, ["CRC-8"]) +
114
- "\nCRC-16: " + (new CRC16Checksum).run(arrayBuffer, []) +
115
- "\nCRC-32: " + (new CRC32Checksum).run(arrayBuffer, []);
131
+ const [length, includeNames] = args;
132
+ this.inputArrayBuffer = input;
133
+ this.inputStr = Utils.arrayBufferToStr(input, false);
134
+ this.inputByteArray = new Uint8Array(input);
135
+
136
+ let digest, output = "";
137
+ // iterate over each of the hashes
138
+ this.hashes.forEach(hash => {
139
+ digest = this.executeAlgo(hash.algo, hash.inputType, hash.params || []);
140
+ output += this.formatDigest(digest, length, includeNames, hash.name);
141
+ });
142
+
143
+ if (length === "All") {
144
+ output += "\nChecksums:\n";
145
+ this.checksums.forEach(checksum => {
146
+ digest = this.executeAlgo(checksum.algo, checksum.inputType, checksum.params || []);
147
+ output += this.formatDigest(digest, length, includeNames, checksum.name);
148
+ });
149
+ }
116
150
 
117
151
  return output;
118
152
  }
119
153
 
154
+ /**
155
+ * Executes a hash or checksum algorithm
156
+ *
157
+ * @param {Function} algo - The hash or checksum algorithm
158
+ * @param {string} inputType
159
+ * @param {Object[]} [params=[]]
160
+ * @returns {string}
161
+ */
162
+ executeAlgo(algo, inputType, params=[]) {
163
+ let digest = null;
164
+ switch (inputType) {
165
+ case "arrayBuffer":
166
+ digest = algo.run(this.inputArrayBuffer, params);
167
+ break;
168
+ case "str":
169
+ digest = algo.run(this.inputStr, params);
170
+ break;
171
+ case "byteArray":
172
+ digest = algo.run(this.inputByteArray, params);
173
+ break;
174
+ default:
175
+ throw new OperationError("Unknown hash input type: " + inputType);
176
+ }
177
+
178
+ return digest;
179
+ }
180
+
181
+ /**
182
+ * Formats the digest depending on user-specified arguments
183
+ * @param {string} digest
184
+ * @param {string} length
185
+ * @param {boolean} includeNames
186
+ * @param {string} name
187
+ * @returns {string}
188
+ */
189
+ formatDigest(digest, length, includeNames, name) {
190
+ if (length !== "All" && (digest.length * 4) !== parseInt(length, 10))
191
+ return "";
192
+
193
+ if (!includeNames)
194
+ return digest + "\n";
195
+
196
+ return `${name}:${" ".repeat(13-name.length)}${digest}\n`;
197
+ }
198
+
120
199
  }
121
200
 
122
201
  export default GenerateAllHashes;
@@ -45,6 +45,7 @@ import "./tests/DateTime.mjs";
45
45
  import "./tests/ExtractEmailAddresses.mjs";
46
46
  import "./tests/Fork.mjs";
47
47
  import "./tests/FromDecimal.mjs";
48
+ import "./tests/GenerateAllHashes.mjs";
48
49
  import "./tests/Gzip.mjs";
49
50
  import "./tests/Gunzip.mjs";
50
51
  import "./tests/Hash.mjs";
@@ -0,0 +1,111 @@
1
+ /**
2
+ * GenerateAllHashes tests.
3
+ *
4
+ * @author john19696 [john19696@protonmail.com]
5
+ * @copyright Crown Copyright 2022
6
+ * @license Apache-2.0
7
+ */
8
+ import TestRegister from "../../lib/TestRegister.mjs";
9
+
10
+ TestRegister.addTests([
11
+ {
12
+ name: "Full generate all hashes",
13
+ input: "test",
14
+ expectedOutput: `MD2: dd34716876364a02d0195e2fb9ae2d1b
15
+ MD4: db346d691d7acc4dc2625db19f9e3f52
16
+ MD5: 098f6bcd4621d373cade4e832627b4f6
17
+ MD6: 93c8a7d0ff132f325138a82b2baa98c12a7c9ac982feb6c5b310a1ca713615bd
18
+ SHA0: f8d3b312442a67706057aeb45b983221afb4f035
19
+ SHA1: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
20
+ SHA2 224: 90a3ed9e32b2aaf4c61c410eb925426119e1a9dc53d4286ade99a809
21
+ SHA2 256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
22
+ SHA2 384: 768412320f7b0aa5812fce428dc4706b3cae50e02a64caa16a782249bfe8efc4b7ef1ccb126255d196047dfedf17a0a9
23
+ SHA2 512: ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff
24
+ SHA3 224: 3797bf0afbbfca4a7bbba7602a2b552746876517a7f9b7ce2db0ae7b
25
+ SHA3 256: 36f028580bb02cc8272a9a020f4200e346e276ae664e45ee80745574e2f5ab80
26
+ SHA3 384: e516dabb23b6e30026863543282780a3ae0dccf05551cf0295178d7ff0f1b41eecb9db3ff219007c4e097260d58621bd
27
+ SHA3 512: 9ece086e9bac491fac5c1d1046ca11d737b92a2b2ebd93f005d7b710110c0a678288166e7fbe796883a4f2e9b3ca9f484f521d0ce464345cc1aec96779149c14
28
+ Keccak 224: 3be30a9ff64f34a5861116c5198987ad780165f8366e67aff4760b5e
29
+ Keccak 256: 9c22ff5f21f0b81b113e63f7db6da94fedef11b2119b4088b89664fb9a3cb658
30
+ Keccak 384: 53d0ba137307d4c2f9b6674c83edbd58b70c0f4340133ed0adc6fba1d2478a6a03b7788229e775d2de8ae8c0759d0527
31
+ Keccak 512: 1e2e9fc2002b002d75198b7503210c05a1baac4560916a3c6d93bcce3a50d7f00fd395bf1647b9abb8d1afcc9c76c289b0c9383ba386a956da4b38934417789e
32
+ Shake 128: d3b0aa9cd8b7255622cebc631e867d4093d6f6010191a53973c45fec9b07c774
33
+ Shake 256: b54ff7255705a71ee2925e4a3e30e41aed489a579d5595e0df13e32e1e4dd202a7c7f68b31d6418d9845eb4d757adda6ab189e1bb340db818e5b3bc725d992fa
34
+ RIPEMD-128: f1abb5083c9ff8a9dbbca9cd2b11fead
35
+ RIPEMD-160: 5e52fee47e6b070565f74372468cdc699de89107
36
+ RIPEMD-256: fe0289110d07daeee9d9500e14c57787d9083f6ba10e6bcb256f86bb4fe7b981
37
+ RIPEMD-320: 3b0a2e841e589cf583634a5dd265d2b5d497c4cc44b241e34e0f62d03e98c1b9dc72970b9bc20eb5
38
+ HAS-160: cb15e491eec6e769771d1f811315139c93071084
39
+ Whirlpool-0: d50ff71342b521974bae166539871922669afcfc7181250ebbae015c317ebb797173a69e7a05afd11099a9f0918159cd5bc88434d3ca44513d7263caea9244fe
40
+ Whirlpool-T: e6b4aa087751b4428171777f1893ba585404c7e0171787720eba0d8bccd710dc2c42f874c572bfae4cedabf50f2c80bf923805d4e31c504b86ca3bc59265e7dd
41
+ Whirlpool: b913d5bbb8e461c2c5961cbe0edcdadfd29f068225ceb37da6defcf89849368f8c6c2eb6a4c4ac75775d032a0ecfdfe8550573062b653fe92fc7b8fb3b7be8d6
42
+ BLAKE2b-128: 44a8995dd50b6657a037a7839304535b
43
+ BLAKE2b-160: a34fc3b6d2cce8beb3216c2bbb5e55739e8121ed
44
+ BLAKE2b-256: 928b20366943e2afd11ebc0eae2e53a93bf177a4fcf35bcc64d503704e65e202
45
+ BLAKE2b-384: 8a84b8666c8fcfb69f2ec41f578d7c85fbdb504ea6510fb05b50fcbf7ed8153c77943bc2da73abb136834e1a0d4f22cb
46
+ BLAKE2b-512: a71079d42853dea26e453004338670a53814b78137ffbed07603a41d76a483aa9bc33b582f77d30a65e6f29a896c0411f38312e1d66e0bf16386c86a89bea572
47
+ BLAKE2s-128: e9ddd9926b9dcb382e09be39ba403d2c
48
+ BLAKE2s-160: d6197dabec2bd6f4ff303b8e519e8f15d42a453d
49
+ BLAKE2s-256: f308fc02ce9172ad02a7d75800ecfc027109bc67987ea32aba9b8dcc7b10150e
50
+ Streebog-256: 12a50838191b5504f1e5f2fd078714cf6b592b9d29af99d0b10d8d02881c3857
51
+ Streebog-512: 7200bf5dea560f0d7960d07fdc8874ad9f3b86ece2e45f5502ae2e176f2c928e0e581152281f5aee818318bed7cbe6aa69999589234723ceb33175598365b5c8
52
+ GOST: ee67303696d205ddd2b2363e8e01b4b7199a80957d94d7678eaad3fc834c5a27
53
+ SSDEEP: 3:Hn:Hn
54
+ CTPH: A:E:E
55
+
56
+ Checksums:
57
+ Fletcher-8: 3d
58
+ Fletcher-16: 5dc1
59
+ Fletcher-32: 045901c0
60
+ Fletcher-64: 00000459000001c0
61
+ Adler-32: 045d01c1
62
+ CRC-8: b9
63
+ CRC-16: f82e
64
+ CRC-32: d87f7e0c
65
+ `,
66
+ recipeConfig: [
67
+ {
68
+ "op": "Generate all hashes",
69
+ "args": ["All", true]
70
+ }
71
+ ]
72
+ },
73
+ {
74
+ name: "Hashes with length 32",
75
+ input: "test",
76
+ expectedOutput: `MD2: dd34716876364a02d0195e2fb9ae2d1b
77
+ MD4: db346d691d7acc4dc2625db19f9e3f52
78
+ MD5: 098f6bcd4621d373cade4e832627b4f6
79
+ RIPEMD-128: f1abb5083c9ff8a9dbbca9cd2b11fead
80
+ BLAKE2b-128: 44a8995dd50b6657a037a7839304535b
81
+ BLAKE2s-128: e9ddd9926b9dcb382e09be39ba403d2c
82
+ `,
83
+ recipeConfig: [
84
+ {
85
+ "op": "Generate all hashes",
86
+ "args": ["128", true]
87
+ }
88
+ ]
89
+ },
90
+ {
91
+ name: "Hashes without names",
92
+ input: "test",
93
+ expectedOutput: `93c8a7d0ff132f325138a82b2baa98c12a7c9ac982feb6c5b310a1ca713615bd
94
+ 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
95
+ 36f028580bb02cc8272a9a020f4200e346e276ae664e45ee80745574e2f5ab80
96
+ 9c22ff5f21f0b81b113e63f7db6da94fedef11b2119b4088b89664fb9a3cb658
97
+ d3b0aa9cd8b7255622cebc631e867d4093d6f6010191a53973c45fec9b07c774
98
+ fe0289110d07daeee9d9500e14c57787d9083f6ba10e6bcb256f86bb4fe7b981
99
+ 928b20366943e2afd11ebc0eae2e53a93bf177a4fcf35bcc64d503704e65e202
100
+ f308fc02ce9172ad02a7d75800ecfc027109bc67987ea32aba9b8dcc7b10150e
101
+ 12a50838191b5504f1e5f2fd078714cf6b592b9d29af99d0b10d8d02881c3857
102
+ ee67303696d205ddd2b2363e8e01b4b7199a80957d94d7678eaad3fc834c5a27
103
+ `,
104
+ recipeConfig: [
105
+ {
106
+ "op": "Generate all hashes",
107
+ "args": ["256", false]
108
+ }
109
+ ]
110
+ }
111
+ ]);