2018-05-17 15:11:34 +00:00
/**
* @author n1474335 [n1474335@gmail.com]
* @copyright Crown Copyright 2016
* @license Apache-2.0
*/
2019-07-09 12:23:59 +01:00
import Operation from "../Operation.mjs" ;
import Utils from "../Utils.mjs" ;
import { HASH_DELIM_OPTIONS } from "../lib/Delim.mjs" ;
2018-05-17 15:11:34 +00:00
import ctphjs from "ctph.js" ;
2019-07-09 12:23:59 +01:00
import OperationError from "../errors/OperationError.mjs" ;
2018-05-17 15:11:34 +00:00
/**
* Compare CTPH hashes operation
*/
class CompareCTPHHashes extends Operation {
/**
* CompareCTPHHashes constructor
*/
constructor () {
super ();
this . name = "Compare CTPH hashes" ;
2018-12-25 23:58:00 +00:00
this . module = "Crypto" ;
2018-05-17 15:11:34 +00:00
this . description = "Compares two Context Triggered Piecewise Hashing (CTPH) fuzzy hashes to determine the similarity between them on a scale of 0 to 100." ;
2024-02-03 02:02:13 +00:00
this . infoURL = "https://forensics.wiki/context_triggered_piecewise_hashing/" ;
2018-05-17 15:11:34 +00:00
this . inputType = "string" ;
this . outputType = "Number" ;
this . args = [
{
"name" : "Delimiter" ,
"type" : "option" ,
"value" : HASH_DELIM_OPTIONS
}
];
}
/**
* @param {string} input
* @param {Object[]} args
* @returns {Number}
*/
run ( input , args ) {
const samples = input . split ( Utils . charRep ( args [ 0 ]));
if ( samples . length !== 2 ) throw new OperationError ( "Incorrect number of samples." );
return ctphjs . similarity ( samples [ 0 ], samples [ 1 ]);
}
}
export default CompareCTPHHashes ;