OTP module for nodejs
Well, as what you can expect! This is a another module providing OTP function for developers. I do it because I recently encounter a very stupid problem from other modules. And that module's latest modification date was 3~4 years ago. So I gave up and write a new one on my own. This module is "TEMPORARILY" designed for nodejs only 'cuase that's what I needed it for.
Requirement
- NodeJS >= 6.4 ( with es6 syntax support... )
Installation
npm install lib-otp
Usage
const otp = require( 'lib-otp' ); let otpFromURI = otp( 'otpauth://totp/....' ); // Create an otp object by parsing an otpauth URI let otpObj = otp({ secret:'secret', // The secret of this otp instance, either Buffer or String is accepted, used in otp generation label: '_label' // The label of this otp instance, the string that is used in generating an otpauth URI}); // Obtain TOTPotpObj.totp(6); // Obtain an otp code with 6 digitsotpObj.totp({ // Obtain an otp code at specific moment with 8 digits time:((new Date()).getTime()/1000)|0, length:8}); // Obtain HOTPotpObj.hotp(13, 6); // Obtain an hotp code of counter value 13 with 6 digitsotpObj.hotp({ // Alternative accepted usage counter:13, // counter value, can be either Buffer or Number, other types will be casted into string and converted into buffer length:6}); otpObj.totpURI(); // otpauth://totp/_label?secret=Base32EncodedSecretotpObj.hotpURI(); // otpauth://hotp/_label?secret=Base32EncodedSecret
Note
By default, this module will handle numeric values via BN.js library. But developers can choose to use bitwise operator to cast given numeric values into normal integers.
OTP.TOTPUseBN = false; // This value is true by default
But javascript current only natively support 32bit integers, using it will cause unexpected data loss if the given number's range is larger than 32bits.
So... use at your own risk...