Giter VIP home page Giter VIP logo

supergenpass-lib's Introduction

supergenpass-lib

Build Status Code Climate Coverage Status NPM version Dependencies Status

This is the official JavaScript implementation of SuperGenPass. It provides the code used by the bookmarklet and mobile version of SuperGenPass to generate passwords. If you are building or have built your own JavaScript-based application for SuperGenPass, please consider using this library.

NPM module

npm install supergenpass-lib

Usage

var sgp = require('supergenpass-lib');

// A string containing the user's master password.
var masterPassword = 'master-password';

// A URI or hostname of the site being visited.
var URI = 'http://www.example.com/page.html';

// A callback function to accept the generated password.
var callback = function (password) {/* code */};

// Generate the password.
sgp.generate(masterPassword, URI, {/* options */}, callback);

Note: Version 3.0.0 introduces the generate method instead of making this function the root export. This change was made to align with ES6 exports.

Options

As shown above, supergenpass-lib optionally accepts a hash map of options.

hashRounds

  • Default 10
  • Expects Number

Minimum number of rounds to hash the input. (Hashing may continue past the minimum until the password validation rules are satisfied.)

length

  • Default 10
  • Expects Number

Length of the generated password. Valid lengths are integers between 4 and 24 inclusive. Note that 23- and 24-character MD5-based passwords provide no additional entropy. (The value for those characters will always be A.)

method

  • Default 'md5'
  • Expects String or Function

A string specifying the requested hash function. The only supported string values are 'md5' or 'sha512'.

Alternatively, you can supply your own hash function. This hash function must accept a string value and return a string value. Returned hashes should be at least 24 characters and will be subject to SGP’s password validation rules.

passthrough

  • Default false
  • Expects Boolean

A boolean value directing whether or not to use the url as is without validation or changes.

removeSubdomains

  • Default true
  • Expects Boolean

A boolean value directing whether or not to remove subdomains from the hostname before generating the password.

secret

  • Default ''
  • Expects String

A secret password to be appended to the master password before generating the password. This option is provided for convenience, as the same output can be produced by manually concatenating the master and secret passwords.

Domain name isolation

By default, supergenpass-lib isolates the domain name (e.g., example.com) from the hostname by removing all subdomains. This ensures that the same password is generated at example.com, www.example.com, and login.example.com. It additionally uses a hardcoded list of country-code and special-purpose TLDs to produce different passwords across sites registered there. While this list is no doubt incomplete and out-of-date, it remains static to maintain backwards compatibility. You can disable subdomain removal in the options.

To help provide user feedback about the exact hostname used to generate the password, supergenpass-lib provides a hostname method that can be used separately.

// Isolate a domain name from a URL using SuperGenPass's rules.
var hostname = supergenpass.hostname('http://login.example.com/doLogin.htm', {
  removeSubdomains: true  // default = true
});

Explanation of the algorithm

SuperGenPass is a very simple password hashing scheme. At its essence, it takes a master password and a hostname and concatenates them together:

masterpassword:example.com

It uses this as the input for the user's preferred hash function. It guarantees hashing at least ten times to protect against rainbow tables. The hash is then cut to the user's preferred password length.

For more detail, please see the (well-commented and concise) source code.

Tests

Tests require Node >=4.0. Run npm test.

Dependencies and license

Hash functions are provided by crypto-js. All original code is released under the GPLv2.

Thanks

Development of this library was helped tremendously by Denis Sokolov, author of the SuperGenPass Chrome extension.

supergenpass-lib's People

Contributors

assertores avatar chriszarate avatar denis-sokolov avatar lydell avatar

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.