UNPKG

@logsn/arweave

Version:
34 lines (33 loc) 1.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const common_1 = require("../common"); async function deepHash(data) { if (Array.isArray(data)) { const tag = common_1.default.utils.concatBuffers([ common_1.default.utils.stringToBuffer("list"), common_1.default.utils.stringToBuffer(data.length.toString()), ]); return await deepHashChunks(data, await common_1.default.crypto.hash(tag, "SHA-384")); } const tag = common_1.default.utils.concatBuffers([ common_1.default.utils.stringToBuffer("blob"), common_1.default.utils.stringToBuffer(data.byteLength.toString()), ]); const taggedHash = common_1.default.utils.concatBuffers([ await common_1.default.crypto.hash(tag, "SHA-384"), await common_1.default.crypto.hash(data, "SHA-384"), ]); return await common_1.default.crypto.hash(taggedHash, "SHA-384"); } exports.default = deepHash; async function deepHashChunks(chunks, acc) { if (chunks.length < 1) { return acc; } const hashPair = common_1.default.utils.concatBuffers([ acc, await deepHash(chunks[0]), ]); const newAcc = await common_1.default.crypto.hash(hashPair, "SHA-384"); return await deepHashChunks(chunks.slice(1), newAcc); }