2018-05-17 17:11:34 +02:00
|
|
|
/**
|
2022-09-22 17:39:51 +02:00
|
|
|
* @author john19696 [john19696@protonmail.com]
|
|
|
|
* @copyright Crown Copyright 2023
|
2018-05-17 17:11:34 +02:00
|
|
|
* @license Apache-2.0
|
|
|
|
*/
|
|
|
|
|
2019-07-09 13:23:59 +02:00
|
|
|
import Operation from "../Operation.mjs";
|
|
|
|
import Utils from "../Utils.mjs";
|
|
|
|
import MD2 from "./MD2.mjs";
|
|
|
|
import MD4 from "./MD4.mjs";
|
|
|
|
import MD5 from "./MD5.mjs";
|
|
|
|
import MD6 from "./MD6.mjs";
|
|
|
|
import SHA0 from "./SHA0.mjs";
|
|
|
|
import SHA1 from "./SHA1.mjs";
|
|
|
|
import SHA2 from "./SHA2.mjs";
|
|
|
|
import SHA3 from "./SHA3.mjs";
|
|
|
|
import Keccak from "./Keccak.mjs";
|
|
|
|
import Shake from "./Shake.mjs";
|
|
|
|
import RIPEMD from "./RIPEMD.mjs";
|
|
|
|
import HAS160 from "./HAS160.mjs";
|
|
|
|
import Whirlpool from "./Whirlpool.mjs";
|
|
|
|
import SSDEEP from "./SSDEEP.mjs";
|
|
|
|
import CTPH from "./CTPH.mjs";
|
|
|
|
import Fletcher8Checksum from "./Fletcher8Checksum.mjs";
|
|
|
|
import Fletcher16Checksum from "./Fletcher16Checksum.mjs";
|
|
|
|
import Fletcher32Checksum from "./Fletcher32Checksum.mjs";
|
|
|
|
import Fletcher64Checksum from "./Fletcher64Checksum.mjs";
|
|
|
|
import Adler32Checksum from "./Adler32Checksum.mjs";
|
|
|
|
import CRC8Checksum from "./CRC8Checksum.mjs";
|
|
|
|
import CRC16Checksum from "./CRC16Checksum.mjs";
|
|
|
|
import CRC32Checksum from "./CRC32Checksum.mjs";
|
|
|
|
import BLAKE2b from "./BLAKE2b.mjs";
|
|
|
|
import BLAKE2s from "./BLAKE2s.mjs";
|
|
|
|
import Streebog from "./Streebog.mjs";
|
|
|
|
import GOSTHash from "./GOSTHash.mjs";
|
2018-05-17 17:11:34 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Generate all hashes operation
|
|
|
|
*/
|
|
|
|
class GenerateAllHashes extends Operation {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* GenerateAllHashes constructor
|
|
|
|
*/
|
|
|
|
constructor() {
|
|
|
|
super();
|
|
|
|
|
|
|
|
this.name = "Generate all hashes";
|
2018-12-26 00:58:00 +01:00
|
|
|
this.module = "Crypto";
|
2018-05-17 17:11:34 +02:00
|
|
|
this.description = "Generates all available hashes and checksums for the input.";
|
2018-08-21 20:07:13 +02:00
|
|
|
this.infoURL = "https://wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions";
|
2018-05-17 17:11:34 +02:00
|
|
|
this.inputType = "ArrayBuffer";
|
|
|
|
this.outputType = "string";
|
2022-09-22 17:30:36 +02:00
|
|
|
this.args = [
|
|
|
|
{
|
|
|
|
"name": "Length",
|
|
|
|
"type": "option",
|
|
|
|
"value": [
|
|
|
|
"All", "32", "40", "56", "64", "80", "96", "128"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"name": "Output hash names",
|
|
|
|
"type": "boolean",
|
|
|
|
"value": true
|
|
|
|
},
|
|
|
|
];
|
|
|
|
this.hashes = [
|
|
|
|
{"name": "MD2", "hash": (new MD2()), "type": "arrayBuffer", params: []},
|
|
|
|
{"name": "MD4", "hash": (new MD4()), "type": "arrayBuffer", params: []},
|
|
|
|
{"name": "MD5", "hash": (new MD5()), "type": "arrayBuffer", params: []},
|
|
|
|
{"name": "MD6", "hash": (new MD6()), "type": "str", params: []},
|
|
|
|
{"name": "SHA0", "hash": (new SHA0()), "type": "arrayBuffer", params: []},
|
|
|
|
{"name": "SHA1", "hash": (new SHA1()), "type": "arrayBuffer", params: []},
|
|
|
|
{"name": "SHA2 224", "hash": (new SHA2()), "type": "arrayBuffer", params: ["224"]},
|
|
|
|
{"name": "SHA2 256", "hash": (new SHA2()), "type": "arrayBuffer", params: ["256"]},
|
|
|
|
{"name": "SHA2 384", "hash": (new SHA2()), "type": "arrayBuffer", params: ["384"]},
|
|
|
|
{"name": "SHA2 512", "hash": (new SHA2()), "type": "arrayBuffer", params: ["512"]},
|
|
|
|
{"name": "SHA3 224", "hash": (new SHA3()), "type": "arrayBuffer", params: ["224"]},
|
|
|
|
{"name": "SHA3 256", "hash": (new SHA3()), "type": "arrayBuffer", params: ["256"]},
|
|
|
|
{"name": "SHA3 384", "hash": (new SHA3()), "type": "arrayBuffer", params: ["384"]},
|
|
|
|
{"name": "SHA3 512", "hash": (new SHA3()), "type": "arrayBuffer", params: ["512"]},
|
|
|
|
{"name": "Keccak 224", "hash": (new Keccak()), "type": "arrayBuffer", params: ["224"]},
|
|
|
|
{"name": "Keccak 256", "hash": (new Keccak()), "type": "arrayBuffer", params: ["256"]},
|
|
|
|
{"name": "Keccak 384", "hash": (new Keccak()), "type": "arrayBuffer", params: ["384"]},
|
|
|
|
{"name": "Keccak 512", "hash": (new Keccak()), "type": "arrayBuffer", params: ["512"]},
|
|
|
|
{"name": "Shake 128", "hash": (new Shake()), "type": "arrayBuffer", params: ["128", 256]},
|
|
|
|
{"name": "Shake 256", "hash": (new Shake()), "type": "arrayBuffer", params: ["256", 512]},
|
|
|
|
{"name": "RIPEMD-128", "hash": (new RIPEMD()), "type": "arrayBuffer", params: ["128"]},
|
|
|
|
{"name": "RIPEMD-160", "hash": (new RIPEMD()), "type": "arrayBuffer", params: ["160"]},
|
|
|
|
{"name": "RIPEMD-256", "hash": (new RIPEMD()), "type": "arrayBuffer", params: ["256"]},
|
|
|
|
{"name": "RIPEMD-320", "hash": (new RIPEMD()), "type": "arrayBuffer", params: ["320"]},
|
|
|
|
{"name": "HAS-160", "hash": (new HAS160()), "type": "arrayBuffer", params: []},
|
|
|
|
{"name": "Whirlpool-0", "hash": (new Whirlpool()), "type": "arrayBuffer", params: ["Whirlpool-0"]},
|
|
|
|
{"name": "Whirlpool-T", "hash": (new Whirlpool()), "type": "arrayBuffer", params: ["Whirlpool-T"]},
|
|
|
|
{"name": "Whirlpool", "hash": (new Whirlpool()), "type": "arrayBuffer", params: ["Whirlpool"]},
|
|
|
|
{"name": "BLAKE2b-128", "hash": (new BLAKE2b), "type": "arrayBuffer", params: ["128","Hex", {string: "", option: "UTF8"}]},
|
|
|
|
{"name": "BLAKE2b-160", "hash": (new BLAKE2b), "type": "arrayBuffer", params: ["160","Hex", {string: "", option: "UTF8"}]},
|
|
|
|
{"name": "BLAKE2b-256", "hash": (new BLAKE2b), "type": "arrayBuffer", params: ["256","Hex", {string: "", option: "UTF8"}]},
|
|
|
|
{"name": "BLAKE2b-384", "hash": (new BLAKE2b), "type": "arrayBuffer", params: ["384","Hex", {string: "", option: "UTF8"}]},
|
|
|
|
{"name": "BLAKE2b-512", "hash": (new BLAKE2b), "type": "arrayBuffer", params: ["512","Hex", {string: "", option: "UTF8"}]},
|
|
|
|
{"name": "BLAKE2s-128", "hash": (new BLAKE2s), "type": "arrayBuffer", params: ["128","Hex", {string: "", option: "UTF8"}]},
|
|
|
|
{"name": "BLAKE2s-160", "hash": (new BLAKE2s), "type": "arrayBuffer", params: ["160","Hex", {string: "", option: "UTF8"}]},
|
|
|
|
{"name": "BLAKE2s-256", "hash": (new BLAKE2s), "type": "arrayBuffer", params: ["256","Hex", {string: "", option: "UTF8"}]},
|
|
|
|
{"name": "Streebog-256", "hash": (new Streebog), "type": "arrayBuffer", params: ["256"]},
|
|
|
|
{"name": "Streebog-512", "hash": (new Streebog), "type": "arrayBuffer", params: ["512"]},
|
|
|
|
{"name": "GOST", "hash": (new GOSTHash), "type": "arrayBuffer", params: ["D-A"]},
|
|
|
|
{"name": "SSDEEP", "hash": (new SSDEEP()), "type": "str"},
|
|
|
|
{"name": "CTPH", "hash": (new CTPH()), "type": "str"}
|
|
|
|
];
|
|
|
|
this.checksums = [
|
|
|
|
{"name": "Fletcher-8: ", "checksum": (new Fletcher8Checksum), "type": "byteArray", "params": []},
|
|
|
|
{"name": "Fletcher-16: ", "checksum": (new Fletcher16Checksum), "type": "byteArray", "params": []},
|
|
|
|
{"name": "Fletcher-32: ", "checksum": (new Fletcher32Checksum), "type": "byteArray", "params": []},
|
|
|
|
{"name": "Fletcher-64: ", "checksum": (new Fletcher64Checksum), "type": "byteArray", "params": []},
|
|
|
|
{"name": "Adler-32: ", "checksum": (new Adler32Checksum), "type": "byteArray", "params": []},
|
|
|
|
{"name": "CRC-8: ", "checksum": (new CRC8Checksum), "type": "arrayBuffer", "params": ["CRC-8"]},
|
|
|
|
{"name": "CRC-16: ", "checksum": (new CRC16Checksum), "type": "arrayBuffer", "params": []},
|
|
|
|
{"name": "CRC-32: ", "checksum": (new CRC32Checksum), "type": "arrayBuffer", "params": []}
|
|
|
|
];
|
2018-05-17 17:11:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param {ArrayBuffer} input
|
|
|
|
* @param {Object[]} args
|
|
|
|
* @returns {string}
|
|
|
|
*/
|
|
|
|
run(input, args) {
|
2022-09-22 17:30:36 +02:00
|
|
|
const length = args[0];
|
|
|
|
const names = args[1];
|
|
|
|
|
2018-05-17 17:11:34 +02:00
|
|
|
const arrayBuffer = input,
|
|
|
|
str = Utils.arrayBufferToStr(arrayBuffer, false),
|
2022-09-22 17:30:36 +02:00
|
|
|
byteArray = new Uint8Array(arrayBuffer);
|
|
|
|
|
|
|
|
var value, output = "";
|
|
|
|
// iterate over each of the hashes
|
|
|
|
this.hashes.forEach(function (hash) {
|
|
|
|
// calculate the hash value
|
|
|
|
if (hash.type == "arrayBuffer") {
|
|
|
|
value = hash.hash.run(arrayBuffer, hash.params);
|
|
|
|
} else if (hash.type == "str") {
|
|
|
|
if ("params" in hash) {
|
|
|
|
value = hash.hash.run(str, hash.params);
|
|
|
|
} else {
|
|
|
|
value = hash.hash.run(str);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// output the values base on the args: length & names
|
|
|
|
if (length == "All" || value.length === parseInt(length)) {
|
|
|
|
if (names) {
|
|
|
|
output += hash.name + ":" + " ".repeat(13-hash.name.length);
|
|
|
|
}
|
|
|
|
output += value + "\n";
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
if (length == "All") {
|
|
|
|
output += "\nChecksums:" +
|
2019-07-03 18:33:27 +02:00
|
|
|
"\nFletcher-8: " + (new Fletcher8Checksum).run(byteArray, []) +
|
|
|
|
"\nFletcher-16: " + (new Fletcher16Checksum).run(byteArray, []) +
|
|
|
|
"\nFletcher-32: " + (new Fletcher32Checksum).run(byteArray, []) +
|
|
|
|
"\nFletcher-64: " + (new Fletcher64Checksum).run(byteArray, []) +
|
|
|
|
"\nAdler-32: " + (new Adler32Checksum).run(byteArray, []) +
|
|
|
|
"\nCRC-8: " + (new CRC8Checksum).run(arrayBuffer, ["CRC-8"]) +
|
|
|
|
"\nCRC-16: " + (new CRC16Checksum).run(arrayBuffer, []) +
|
|
|
|
"\nCRC-32: " + (new CRC32Checksum).run(arrayBuffer, []);
|
2022-09-22 17:30:36 +02:00
|
|
|
}
|
2018-05-17 17:11:34 +02:00
|
|
|
|
|
|
|
return output;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
export default GenerateAllHashes;
|