UNPKG

@govtechsg/open-attestation

Version:
25 lines (24 loc) 1.16 kB
import { get, omitBy, sortBy } from "lodash"; import { keccak256 } from "js-sha3"; import { flatten } from "../shared/serialize/flatten"; var isKeyOrValueUndefined = function (value, key) { return value === undefined || key === undefined; }; export var flattenHashArray = function (data) { var flattenedData = omitBy(flatten(data), isKeyOrValueUndefined); return Object.keys(flattenedData).map(function (k) { var obj = {}; obj[k] = flattenedData[k]; return keccak256(JSON.stringify(obj)); }); }; export var digestDocument = function (document) { // Prepare array of hashes from filtered data var hashedDataArray = get(document, "privacy.obfuscatedData", []); // Prepare array of hashes from visible data var unhashedData = get(document, "data"); var hashedUnhashedDataArray = flattenHashArray(unhashedData); // Combine both array and sort them to ensure determinism var combinedHashes = hashedDataArray.concat(hashedUnhashedDataArray); var sortedHashes = sortBy(combinedHashes); // Finally, return the digest of the entire set of data return keccak256(JSON.stringify(sortedHashes)); };