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)));
  });
   */