@adraffy/keccak

1-file, 0-dependancy ES6 Keccak that works in the browser.

Usage no npm install needed!

<script type="module">
  import adraffyKeccak from 'https://cdn.skypack.dev/@adraffy/keccak';
</script>

README

keccak.js

1-file, 0-dependancy ES6 Keccak that works in the browser.

Demo

import {keccak, sha3, shake} from '@adraffy/keccak';
// browser: 
// https://unpkg.com/@adraffy/keccak@latest/dist/keccak.min.js

// create a hasher:
let h = keccak(); // default: 256-bit

h.update(Uint8Array.of(3,4)); // byte arrays
h.update(new ArrayBuffer(2)); // array buffers
h.update([1,2]);              // array of bytes
h.update('A');                // strings

// get hash 
console.log(h.bytes); // Uint8Array
console.log(h.hex);   // hex string

// chainable
console.log(sha3().update('A').hex);

// shake support:
let s = shake(128); 
s.bytes();   // first 32-bytes (default: derived from bits)
s.bytes(11); //  next 11-bytes
s.hex(13);   //  next 13-bytes as hex string

Uses Round Constant LFSR from XKCP and 32-bit Permute from emn178/js-sha.

Helpers

import {bytes_from_hex, hex_from_bytes} from '@adraffy/keccak';

console.log(bytes_from_hex('0x01'));
console.log(bytes_from_hex('01')); // 0x is optional
// UintArray(1)[1]
console.log(hex_from_bytes([1,2,3,4])); // no prefix
// "01020304"

import {bytes_from_utf8, utf8_from_bytes} from '@adraffy/keccak';

console.log(bytes_from_utf8('abc')); 
// UintArray(3)[97, 98, 99]
console.log(utf8_from_bytes([240, 159, 146, 169])); // throws on invalid utf8
// "💩"