browser-sha-obj

JavaScript implementation of SHA (1/256/384/512) checksum calculation for the browser.

Usage no npm install needed!

<script type="module">
  import browserShaObj from 'https://cdn.skypack.dev/browser-sha-obj';
</script>

README

BrowserSHAObj

License npm

BrowserSHAObj creates a SHA-(1/256/384/512) object, that holds a typed array of the output for the given algorithm. The idea is to simplify the use of the build in Crypto.subtle methods for checksum generation of modern browsers. With the help of BaseEx, the checksum can be exported to multiple data representations.

Installation

GitHub

git clone https://github.com/UmamiAppearance/BrowserSHAObj.git

npm

nmp install browser-sha-obj

Builds

The GitHub repository has ready to use builds included. You can find them in dist. The npm package comes without pre build files.

For building you have to run:

npm run build

Either way you have two builds available (esm and iife), plus a minified version of each.

  • BrowserSHAObj.esm.js
  • BrowserSHAObj.esm.min.js
  • BrowserSHAObj.iife.js
  • BrowserSHAObj.iife.min.js

Usage

Importing

BrowserSHAObj is a ESM module and exported as default. Importing works as follows:

// esm
import SHAObj from "./path/BrowserSHAObj.esm.min.js";
<!-- script tag -->
<script src="path/BrowserSHAObj.iife.min.js"></script>

Creating an instance

Two arguments are taken by the constructor:

  • algorithm (default: SHA-256)
  • message (default: null)

The algorithm is set to SHA-256 by default. Available options are:

  • SHA-1
  • SHA-256
  • SHA-384
  • SHA-512

The default for message is null (possible input types are described here). If it is not overwritten the created object does not hold a digested array of a message input (yet). This has the advantage, that any (new) input update can be called asynchronously and awaited for.

Examples for creating a new Object:

// default, SHA-256, no message associated
const sha256obj = new SHAObj();

// SHA-512, no message associated
const sha512obj = new SHAObj("SHA-512");

// SHA-1, with message associated (Setting the message
// during initialization makes it a synchronous call. 
// You have been warned!)
const sha1obj = new SHAObj("SHA-1", "Hello World!");

Returned Object

The returned object holds a typed array (UInt8) of the digested hash buffer (obj.array). The message can be updated with obj.update(message). The call returns a Promise.

message accepts as input type:

  • String
  • Typed Array
  • ArrayBuffer

Examples for updating the message:

// string input with await statement
await sha256obj.update("digest me!");

// bytes as input with a '.then()' block
const bytesInput = new Uint8Array([69, 97, 115, 116, 101, 114, 101, 103, 103, 33]);
sha256obj.update(bytesInput).then(() => ... );

Representations

There are multiple functions available to receive a digested representation of the hash (those are build in methods of BaseEx). They are all returning a string of a different kind (hexadecimal, base32, base64...). Those functions are called like this: obj.toRepresentation()

Available methods are:

  • toHex()
  • toBase32_rfc3548()​​
  • toBase32_rfc4648()​​
  • toBase64()​​
  • toBase64_urlsafe()​​
  • toBase85_z85()​​
  • toBase85adobe()​​
  • toBase85ascii()​​
  • toBase91()
Examples for data representations:
// hexadecimal
sha256obj.toHex();

// base32
sha256obj.toBase32_rfc3548();

// base64
sha256obj.toBase64();

See it in action (demo page)

To get a better idea of a possible use case, take a look at the Demopage.