A highly customizable implementation of HMAC-based OTP (HOTP) and Time-based OTP (TOTP).
If something doesn't work, please file an issue
- npm install hotp-totp-generator --save
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' });
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 |
const hotpTotpGenerator = require('hotp-totp-generator');
hotpTotpGenerator.hotp({
key: "my-hotp-key",
counter: 123,
algorithm: 'sha256',
});
const hotpTotpGenerator = require('hotp-totp-generator');
hotpTotpGenerator.hotp({
key: "my-hotp-key",
counter: 123,
digits: 10,
});
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 |
const hotpTotpGenerator = require('hotp-totp-generator');
hotpTotpGenerator.totp({
key: "my-totp-key",
T: 123456
});
const hotpTotpGenerator = require('hotp-totp-generator');
hotpTotpGenerator.totp({
key: "my-totp-key",
T0: 10,
X: 60,
});
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.
- Make CLI tool
- Add unit tests
- Add code coverage status