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

2.0.7 • Public • Published

Generate TOTP

npm version npm downloads

Time-based One-Time Password (TOTP) is an algorithm that generates a one-time password based on the current time. TOTP is an extension of the HMAC-based One-Time Password (HOTP) algorithm and is standardized in RFC 6238. For more details, see Wikipedia.

Table of Contents

Installation

You can install gen-totp via npm or yarn:

npm install gen-totp
# or
yarn add gen-totp

Usage

Basic Usage

import genTOTP from 'gen-totp';

const otp = genTOTP('test-key');
// Returns a 6-digit OTP by default
console.log(otp);

Customizing OTP Length

import genTOTP from 'gen-totp';

const otp = genTOTP('test-key', { digits: 4 });
// Returns a 4-digit OTP
console.log(otp);

Options

The genTOTP function accepts two parameters:

  1. key: A string containing the base32-encoded secret key. It can include numbers, uppercase letters, _, and -.
  2. options: An optional object to customize the OTP generation. The available options are detailed in the table below:
Option Type Default Description
digits number 6 The number of digits in the generated OTP.
period number 30 The time period (in seconds) after which a new OTP is generated.
algorithm string 'SHA-1' The hashing algorithm used to generate the OTP. Supported algorithms include:
- SHA-1
- SHA-224
- SHA-256
- SHA-384
- SHA-512
- SHA3-224
- SHA3-256
- SHA3-384
- SHA3-512
For more details, refer to the JsSHA documentation.

Key Format and Encoding

When providing a key to the genTOTP function, you can use different encodings specified by the encoding option:

  1. UTF-8 Encoding (default):

    • Any valid UTF-8 string can be used as the key
    • Supports alphabetic characters (A-Z, a-z), numeric characters (0-9), special characters, and Unicode characters including emoji
  2. Hex Encoding :

    • The key should be a valid hexadecimal string
    • Only characters 0-9 and a-f (case insensitive) are allowed
  3. Base32 Encoding :

    • The key should be a valid base32 string according to RFC 4648
    • Only uppercase letters A-Z and digits 2-7 are allowed
    • Padding with '=' is optional Example of valid keys:
  • UTF-8: mySecureKey123! , secretKey你好 , emojiKey😊🔑
  • Hex: deadbeef1234 , 01a2b3c4d5e6f7
  • Base32: JBSWY3DPEHPK3PXP , GEZDGNBVGY3TQOJQ

Documentation

For more detailed documentation, visit the Official Documentation .

Contributing

Contributions are welcome! If you have any bug reports, suggestions, or feature requests, please open an issue on GitHub.

To contribute:

  1. Fork the repository
  2. Create a new feature branch ( git checkout -b feature/new-feature )
  3. Commit your changes ( git commit -m 'Add new feature' )
  4. Push to the branch ( git push origin feature/new-feature )
  5. Create a new Pull Request Make sure to follow the Contributor Covenant Code of Conduct when participating in the project.

Package Sidebar

Install

npm i gen-totp

Weekly Downloads

10,520

Version

2.0.7

License

ISC

Unpacked Size

46 kB

Total Files

22

Last publish

Collaborators

  • miladezzat