File size: 872 Bytes
7aec436
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const sha256 = async (arrayBuffer) => {
  // Use the browser's builtin SHA-256 if possible.
  // This API might not exist if we're not a secure context or in versions of Node that aren't even that old,
  // so we also have a pure JS fallback.
  if (typeof crypto === 'object' && crypto.subtle && crypto.subtle.digest) {
    const rawData = await crypto.subtle.digest('SHA-256', arrayBuffer);
    return Array.from(new Uint8Array(rawData)).map(b => b.toString(16).padStart(2, '0')).join('');
  }

  // The checksum will be performed on the main thread and may take a while.
  const SHA256 = (await import(/* webpackChunkName: "sha256" */ 'sha.js/sha256')).default;
  const hash = new SHA256();
  // new Uint8Array() is necessary to make this work in Node
  hash.update(new Uint8Array(arrayBuffer));
  return hash.digest('hex');
};

export default sha256;