/** * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 */ import Operation from "../Operation"; import Utils from "../Utils"; /** * Fletcher-64 Checksum operation */ class Fletcher64Checksum extends Operation { /** * Fletcher64Checksum constructor */ constructor() { super(); this.name = "Fletcher-64 Checksum"; this.module = "Hashing"; this.description = "The Fletcher checksum is an algorithm for computing a position-dependent checksum devised by John Gould Fletcher at Lawrence Livermore Labs in the late 1970s.

The objective of the Fletcher checksum was to provide error-detection properties approaching those of a cyclic redundancy check but with the lower computational effort associated with summation techniques."; this.inputType = "byteArray"; this.outputType = "string"; this.args = []; } /** * @param {byteArray} input * @param {Object[]} args * @returns {string} */ run(input, args) { let a = 0, b = 0; for (let i = 0; i < input.length; i++) { a = (a + input[i]) % 0xffffffff; b = (b + a) % 0xffffffff; } return Utils.hex(b >>> 0, 8) + Utils.hex(a >>> 0, 8); } } export default Fletcher64Checksum;