JSFiddle - React, Tailwind, and code Playground
by msfrisbie
JavaScript
(async function() {
const mozillaCdnUrl = '//download-origin.cdn.mozilla.net/pub/firefox/releases/67.0/';
const firefoxBinaryFilename = 'linux-x86_64/en-US/firefox-67.0.tar.bz2';
const firefoxShaFilename = 'SHA512SUMS';
console.log('Fetching firefox binary...');
const fileArrayBuffer = await (
await fetch(mozillaCdnUrl + firefoxBinaryFilename)
).arrayBuffer();
console.log('Calcualting firefox digest...');
const firefoxBinaryDigest = await crypto.subtle.digest('SHA-512', fileArrayBuffer);
const firefoxHexDigest = Array.from(new Uint8Array(firefoxBinaryDigest))
.map((x) => x.toString(16).padStart(2, '0'))
.join('');
console.log('Fetching published binary digests...');
const shaPairs = (await (await fetch(mozillaCdnUrl + firefoxShaFilename)).text())
.split(/\n/).map((x) => x.split(/\s+/));
let verified = false;
console.log('Checking calculated digest against published digest...');
for (const [sha, filename] of shaPairs) {
if (filename === firefoxBinaryFilename) {
if (sha === firefoxHexDigest) {
verified = true;
break;
}
}
}
console.log('Verified:', verified);
})();
// Uint32Array(8) [1806968364, 2412183400, 1011194873, 876687389,
// 1882014227, 2696905572, 2287897337, 2934400610]
/* const textEncoder = new TextEncoder();
const message = textEncoder.encode('foo');
crypto.subtle.digest('SHA-256', message)
.then((messageDigest) => {
console.log(Array
.from(new Uint8Array(messageDigest))
.map((x) => x.toString(16).padStart(2, '0'))
.join(''));
console.log(Array.prototype.map.call(new Uint8Array(messageDigest), (x) => x.toString(16).padStart(2, '0')).join(''));
//console.log(new Uint32Array(messageDigest)));
});
*/