@govtechsg/open-attestation
Version:
30 lines (29 loc) • 1.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.digestDocument = exports.flattenHashArray = void 0;
var lodash_1 = require("lodash");
var js_sha3_1 = require("js-sha3");
var flatten_1 = require("../shared/serialize/flatten");
var isKeyOrValueUndefined = function (value, key) { return value === undefined || key === undefined; };
var flattenHashArray = function (data) {
var flattenedData = (0, lodash_1.omitBy)((0, flatten_1.flatten)(data), isKeyOrValueUndefined);
return Object.keys(flattenedData).map(function (k) {
var obj = {};
obj[k] = flattenedData[k];
return (0, js_sha3_1.keccak256)(JSON.stringify(obj));
});
};
exports.flattenHashArray = flattenHashArray;
var digestDocument = function (document) {
// Prepare array of hashes from filtered data
var hashedDataArray = (0, lodash_1.get)(document, "privacy.obfuscatedData", []);
// Prepare array of hashes from visible data
var unhashedData = (0, lodash_1.get)(document, "data");
var hashedUnhashedDataArray = (0, exports.flattenHashArray)(unhashedData);
// Combine both array and sort them to ensure determinism
var combinedHashes = hashedDataArray.concat(hashedUnhashedDataArray);
var sortedHashes = (0, lodash_1.sortBy)(combinedHashes);
// Finally, return the digest of the entire set of data
return (0, js_sha3_1.keccak256)(JSON.stringify(sortedHashes));
};
exports.digestDocument = digestDocument;