lifehash
TypeScript icon, indicating that this package has built-in type declarations

0.0.2 • Public • Published

LifeHash

GitHub Action Quality Gate Status code style: prettier Coverage npm

TypeScript/JavaScript implementation of LifeHash: A visual hash algorithm.

DISCLAIMER

This project is in an early development phase and has not been audited or reviewed. Use it at your own risk.

Currently, only version1 and version2 lifehashes are supported.

Description

LifeHash is a method of hash visualization based on Conway’s Game of Life that creates beautiful icons that are deterministic, yet distinct and unique given the input data.

The basic concept is to take a SHA-256 hash of the input data (which can be any data including another hash) and then use the 256-bit digest as a 16x16 pixel "seed" for running the cellular automata known as Conway’s Game of Life.

After the pattern becomes stable (or begins repeating) the resulting history is used to compile a grayscale image of all the states from the first to last generation. Using Game of Life provides visual structure to the resulting image, even though it was seeded with entropy.

Some bits of the initial hash are then used to deterministically apply symmetry and color to the icon to add beauty and quick recognizability.

Source: https://lifehash.info/

Installation

npm install lifehash

Example

import { LifeHash, LifeHashVersion } from 'lifehash';

const lifehash = LifeHash.makeFrom(input, LifeHashVersion.version2, 1, true);

lifehash.toDataUrl(); // base64 image

For more examples, check the examples folder or the tests.

Documentation

This library exports one class called LifeHash.

LifeHash

class LifeHash {
  static makeFrom(
    data: string | Uint8Array,
    version = LifeHashVersion.version2,
    module_size = 1,
    has_alpha = false,
  ): Image {
    /* */
  }

  static makeFromDigest(
    digest: Uint8Array | Buffer,
    version = LifeHashVersion.version2,
    module_size = 1,
    has_alpha = false,
  ): Image {
    /* */
  }
}

Testing

npm install
npm test

TODOs

  • [ ] Support remaining LifeHashVersions
  • [ ] Add tests
  • [ ] Enable Linting
  • [ ] Fix sonarsource coverage not working
  • [ ] Audit/review of library by 3rd party

Dependencies

We try to use only a minimal set of dependencies to reduce the attack surface of malicious code being added by one of those dependencies.

There is only 1 (non-dev) dependency:

It is managed by crypto-browserify.

Usages

Currently, the following wallets support LifeHash:

Credits

The project setup has been inspired by multiple bitcoinjs libraries, such as bip39 and bip85.

Original C++ implementation: https://github.com/BlockchainCommons/bc-lifehash

This implementation is heavily inspired by https://github.com/BlockchainCommons/bc-lifehash-python

LICENSE

MIT

Package Sidebar

Install

npm i lifehash

Weekly Downloads

7

Version

0.0.2

License

MIT

Unpacked Size

69 kB

Total Files

49

Last publish

Collaborators

  • andreasgassmann