in source/lambda/calculateTreehash/lib/treehash.js [102:125]
function computeSHA256TreeHash(chunkHashes) {
let prevLvlHashes = [];
for (const entry of chunkHashes) {
prevLvlHashes.push(CryptoJS.enc.Hex.parse(entry))
}
while (prevLvlHashes.length > 1) {
let currLvlHashes = []
for (let i = 0; i < prevLvlHashes.length; i = i + 2) {
// If there are at least two elements remaining
if (prevLvlHashes.length - i > 1) {
let entry = prevLvlHashes[i].clone().concat(prevLvlHashes[i + 1])
let entryHash = CryptoJS.SHA256(entry)
currLvlHashes.push(entryHash)
} else { // Take care of remaining odd chunk
currLvlHashes.push(prevLvlHashes[i])
}
}
prevLvlHashes = currLvlHashes
}
return prevLvlHashes[0].toString(CryptoJS.enc.Hex)
}