Git Product home page Git Product logo

juanelas / object-sha Goto Github PK

View Code? Open in Web Editor NEW
3.0 3.0 0.0 360 KB

A package to perform SHA hash functions over key-value objects that works both in Node.js and native JS. It also can be used with typescript projects. It provides a single method `digest()` that first creates an array of the object values ordered by the object keys (order in JS objects is not guaranteed); then, it JSON.stringify it; and finally it hashes it. The output is a string with the hexadecimal representation of the digest. Internally the hash is computed using node crypto (node.js) or subtle crypto (browsers). In order to guarantee native compatibility with browsers, the supported hash algorithms are SHA-1, SHA-256, SHA-384 and SHA-512.

License: MIT License

JavaScript 88.58% TypeScript 11.42%
hash sha2 object hashable

object-sha's Introduction

License: MIT Contributor Covenant JavaScript Style Guide Node.js CI Coverage Status

object-sha

A package to compute the SHA hash of a JS Object. It works in Node.js and native JS and can be directly imported into TypeScript projects (types provided).

It includes two methods hashable(obj) and digest(obj) (see API Ref Doc below):

  • hashable(obj) prepares any object with no known order to be hashable. It recursively traverses the input to find Objects. Then every Object is converted to an array sorted by key of 2-arrays [key, value]. The final result is JSON.stringify-ed and returned as a string. Since a specific order is now guaranteed, we can safely use the output as the input for any hash algorithm.

  • digest(obj, [algorithm]) performs an SHA-2 hash to the input obj, which is first made hashable with hashable(obj). The output is a string with the hexadecimal representation of the digest. Internally the hash is computed using node crypto (node.js) or subtle crypto (browsers). Supported hash algorithms are SHA-1, SHA-256, SHA-384 and SHA-512.

Usage

object-sha can be imported to your project with npm:

npm install object-sha

Then either require (Node.js CJS):

const objectSha = require('object-sha')

or import (JavaScript ES module):

import * as objectSha from 'object-sha'

The appropriate version for browser or node is automatically exported.

You can also download the IIFE bundle, the ESM bundle or the UMD bundle and manually add it to your project, or, if you have already installed object-sha in your project, just get the bundles from node_modules/object-sha/dist/bundles/.

An example of usage could be:

const objectSha = require('object-sha') // or import * as objectSha from 'object-sha'

const obj1 = { src: 'A', dst: 'B', msg: { hello: 'goodbye!', arr: [2, 9, { b: 5, a: 7 }] } }
const obj2 = { dst: 'B', src: 'A', msg: { arr: [2, 9, { a: 7, b: 5 }], hello: 'goodbye!' } }

console.log(objectSha.hashable(obj1)) // [["dst","B"],["msg",[["arr",[2,9,[["a",7],["b",5]]]],["hello","goodbye!"]]],["src","A"]]
console.log(objectSha.hashable(obj2)) // [["dst","B"],["msg",[["arr",[2,9,[["a",7],["b",5]]]],["hello","goodbye!"]]],["src","A"]]

objectSha.digest(obj1).then(console.log) // 6269af73d25f886a50879942cdf5c40500371c6f4d510cec0a67b2992b0a9549
objectSha.digest(obj2).then(console.log) // 6269af73d25f886a50879942cdf5c40500371c6f4d510cec0a67b2992b0a9549

objectSha.digest(obj1, 'SHA-512').then(console.log) // f3325ec4c42cc0154c6a9c78446ce3915196c6ae62d077838b699ca83faa2bd2c0639dd6ca43561afb28bfeb2ffd7481b45c07eaebb7098e1c62ef3c0d441b0b
objectSha.digest(obj2, 'SHA-512').then(console.log) // f3325ec4c42cc0154c6a9c78446ce3915196c6ae62d077838b699ca83faa2bd2c0639dd6ca43561afb28bfeb2ffd7481b45c07eaebb7098e1c62ef3c0d441b0b

API reference documentation

Check the API

object-sha's People

Contributors

dependabot[bot] avatar juanelas avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

object-sha's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.