srcnix / hotp-totp-generator

A HMAC-based OTP (HOTP) and Time-based OTP (TOTP) that generates OTP tokens from OTP key with customizable hash algorithm.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

HOTP-TOTP-Generator

Version Downloads/week License

A highly customizable implementation of HMAC-based OTP (HOTP) and Time-based OTP (TOTP).

If something doesn't work, please file an issue

Installation

  • npm install hotp-totp-generator --save

Sample Usage:

  const hotpOtpGenerator = require('hotp-otp-generator')

  // Example of HOTP
  const hotpToken = hotpOtpGenerator.hotp({ key: '12345678901234567890', counter: 100 });

  // Example of TOTP
  const totpToken = hotpOtpGenerator.totp({ key: '12345678901234567890' });

Docs

HOTP Implementation

For HMAC-based One Time Password (HOTP), parameter is an object consisting of:

Key Name Type Default Value Description
key string - Unique shared secret key for encrypting C values for HMAC algorithm
counter number - 8-bytes incrementing counter value
algorithm enum: 'sha1' | 'sha256' | 'sha512' 'sha1' HMAC Algorithm used for encrypting the counter
digits number 6 Return digits of HOTP value

Example:

Customizing Default Algorithm

const hotpTotpGenerator = require('hotp-totp-generator');
hotpTotpGenerator.hotp({
  key: "my-hotp-key",
  counter: 123,
  algorithm: 'sha256',
});

Customizing Default Return Digits

const hotpTotpGenerator = require('hotp-totp-generator');
hotpTotpGenerator.hotp({
  key: "my-hotp-key",
  counter: 123,
  digits: 10,
});

TOTP Implementation

For Time-based One Time Password (TOTP), parameter is an object consisting of:

Key Name Type Default Value Description
key string - Unique shared secret key for encrypting epoch time for HMAC algorithm
T number current unix time Epoch time (Unix time)
T0 number 0 The Unix time to start counting time steps
X number 30 The time step in seconds
algorithm enum: 'sha1' | 'sha256' | 'sha512' 'sha1' HMAC Algorithm used for encrypting the unix time
digits number 6 Return digits of HOTP value

Example:

Customizing Unix Time

const hotpTotpGenerator = require('hotp-totp-generator');
hotpTotpGenerator.totp({
  key: "my-totp-key",
  T: 123456
});

Customizing T0 and X

const hotpTotpGenerator = require('hotp-totp-generator');
hotpTotpGenerator.totp({
  key: "my-totp-key",
  T0: 10,
  X: 60,
});

Contributing

Any contribution for this library will be very appreciated! Feel free to open issues / pull requests! If you are interested on contributing, you can check out several things todo in the TODO section below.

TODO

  • Make CLI tool
  • Add unit tests
  • Add code coverage status

About

A HMAC-based OTP (HOTP) and Time-based OTP (TOTP) that generates OTP tokens from OTP key with customizable hash algorithm.

License:MIT License


Languages

Language:JavaScript 100.0%