New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

2fa-utils

Package Overview
Dependencies
Maintainers
1
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

2fa-utils

TOTP and HOTP utilities.

latest
Source
npmnpm
Version
1.2.6
Version published
Weekly downloads
268
15.52%
Maintainers
1
Weekly downloads
 
Created
Source

Two-Factor Authentication

npm Build Codecov

Using the algorithm provided in RFC 4226, can generate and verify HMAC-based one-time password (HOTP) and time-based one-time password (TOTP).

Features

  • Generate base-32 encoded secrets.
  • Generate HMAC-based one-time passwords (HOTP) at a specific length.
  • Generate time-based HOTPs at a specific amount of windows.
  • Verify generated tokens.

Usage

Generating Secret

For each account, a secret must be generated and shared between the server and the client. This secret will be used to create and verify HOTPs.

const secret = twoFA.generateSecret();

Generating HOTP

HOTP requires a base32-encoded secret and a counter with time-step.

// Generate base32 secret
const secret = twoFA.generateSecret();
// Create counter with 30 seconds interval 
const counter = Math.floor(Date.now() / 30000);

const hotp = twoFA.generateHOTP(secret, counter, 6)

Generating TOTP

Generating TOTP allows you to get a HOTP in a specific time window.

const secret = twoFA.generateSecret();

// Get the current time window's token
const currentTotp = twoFA.generateTOTP(secret, 0);

// Get the future time window's token (1 window ahead)
const futureTotp = twoFA.generateTOTP(secret, 1);

// Get the past time window's token (1 window behind)
const pastTotp = twoFA.generateTOTP(secret, -1);

Verifying HOTP

Verify tokens supplied via user input.

function verifyHOTP(inputToken) {
  const secret = twoFA.generateSecret();
  const counter = Math.floor(Date.now() / 30000);

  // Actual token generated by the server
  const actualToken = twoFA.generateHOTP(secret, counter)

  if (inputToken === actualToken) return true;
  return false
}

Verifying TOTP

Verify tokens supploed via user input with a time tolerance.

const secret = twoFA.generateSecret();

const inputToken = '111111';

/* This will return true if the input token 
  - is currently valid,
  - was previously valid in the last window,
  - will be valid in the next window.
*/
const isTokenValid = twoFA.verifyTOTP(inputToken, secret, 1);

Dependencies

Author

  • Boran Seckin

License

This project is licensed under the MIT License - see the LICENSE file for details.

Keywords

TOTP

FAQs

Package last updated on 20 Oct 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts