{"_id":"hotp","_rev":"4-79c6691d8c1539c0a11493b469a9be4d","name":"hotp","dist-tags":{"latest":"3.0.1"},"versions":{"1.0.0":{"name":"hotp","version":"1.0.0","keywords":["hotp","otp","rfc4226","rfc 4226","one-time password","two-factor authentication","two-factor","2fa","authentication","authenticator"],"author":{"url":"https://jhermsmeier.de","name":"Jonas Hermsmeier","email":"jhermsmeier@gmail.com"},"license":"MIT","_id":"hotp@1.0.0","maintainers":[{"name":"jhermsmeier","email":"jhermsmeier@gmail.com"}],"homepage":"https://github.com/jhermsmeier/node-hotp","bugs":{"url":"https://github.com/jhermsmeier/node-hotp/issues"},"bin":{"hotp":"bin/hotp"},"dist":{"shasum":"e5c0c5acb63b0b4557fe31cb23d9180f373e939b","tarball":"https://registry.npmjs.org/hotp/-/hotp-1.0.0.tgz","fileCount":5,"integrity":"sha512-oEneoN4gTgXh4BoxZM1DfkdbDbQch8qPUawJuyqJtWojDs3A0Q/45dDRuZX6wrOtIuipS6xbNA5s6ZeF1TPQ/Q==","signatures":[{"sig":"MEYCIQDNtQr8bUAouqOozbA2WT0IYs/giTC/kigfPh59zdlkPAIhALc2dC4iYmKViWZv1D9bMTk6SPsF/dfFE0sACx1LA9hJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4694,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcUhHVCRA9TVsSAnZWagAAJcsP/1FXT3L8eFWFonvsdbvl\nCmcdMMRklCJUmhPmfVdCYpFiB5RC+scS6oq0mOgaJnVHh8rqVkzDLO34gWnI\nouMDEDh+lGZHnTvULx/YruS62saAaxgZtzRvlZEJqHDAz5MKGXRcXrdDZqnx\nlI19a7NW92AcFhlNHIbs9lm5LgFNQlYK4mNranwguLIMlb3nJ8lq+LrHvaLu\nPen7FmATCkMA2UN/SZFa/+vC/XnV8skPARl8bJQjIUvUnxfDhvlQx7B5F+/z\nekTFIOhnIS7DwocXL98LCLXyrAZ1tfIvXfkVddKswjyRKmNJaVi1IMExXML0\nVE7KqzYWXcdofYrwjTTWMvN6LoDFUOMm7DsRLrco8nQtJT0T5VVGHSXZBG6e\nbMcgVw70wD6OOgSUbP1tOdoXo7ZBsfYrozUTYeJxm3TOdJyg+jz1cfhUONQQ\nbytWemx9BySbjB2XJTU9SB49NXoChfjPJMwRlV2GDqg4Ul5LJ6U0vc4NcsTk\nii8VNPXkSmD2QGmJl2jPad0Z6ZQ/rK0xcuxjr2Ssg40GPlmfnbIZPxno3bWw\nD04vJbl4zHGY8LNJd/IjuTq4+ElcXseey0MFmHHAA989HSLB2qjcRVLDiar6\n2hhbTsX7/CrS5hNS1GDfLvdj0nUSWDyOtjAWlHTcQswkMKuG/MuEXY1MjfV6\nLtm/\r\n=DD9N\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/hotp","gitHead":"d6c59c52318da105f15c43f1325e8e012d61f4f5","scripts":{"test":"mocha"},"_npmUser":{"name":"jhermsmeier","email":"jhermsmeier@gmail.com"},"repository":{"url":"git+https://github.com/jhermsmeier/node-hotp.git","type":"git"},"_npmVersion":"6.5.0","description":"HMAC-Based One-Time Password (HOTP) Algorithm","directories":{},"_nodeVersion":"11.8.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hotp_1.0.0_1548882388808_0.16091726344878787","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"hotp","version":"2.0.0","keywords":["hotp","totp","otp","rfc4226","rfc 4226","4226","rfc6238","rfc 6238","6238","one-time password","two-factor authentication","two-factor","2fa","authentication","authenticator","hmac","hmac-based","time-based"],"author":{"url":"https://jhermsmeier.de","name":"Jonas Hermsmeier","email":"jhermsmeier@gmail.com"},"license":"MIT","_id":"hotp@2.0.0","maintainers":[{"name":"jhermsmeier","email":"jhermsmeier@gmail.com"}],"homepage":"https://github.com/jhermsmeier/node-hotp","bugs":{"url":"https://github.com/jhermsmeier/node-hotp/issues"},"bin":{"hotp":"bin/hotp","totp":"bin/totp"},"dist":{"shasum":"f71b8ac23a03ad75f6977d93672954f0d1a7fbcf","tarball":"https://registry.npmjs.org/hotp/-/hotp-2.0.0.tgz","fileCount":7,"integrity":"sha512-wDcVjOS8+3SIFQzYYKQkbrnttcejABQ10FB9NtifkxrTeG/U4QkIMGmN7CXuaz7YjIoAuIUCO4BmB2sm4XUAOg==","signatures":[{"sig":"MEUCIQDrgTkLlZsA2foYfqgEuNwrKKgt67KD4eFpqHvcdF0aQgIgFMSFgSiXwzM0rsS5vxXWulCLEQ61AJJ6HMnOr6y1Jxo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7471,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcVA/ICRA9TVsSAnZWagAAjKoP/3qSzxYhpWBi3QrhJJ7A\nquE3aLKsOhlqlE/s1JN4RMgHJnneFrrzhTUEnUFAAyXzz8nQ2EKZEyHRdIRr\nfN/cYqyW93OOYFiyp6ATV4v1iiDzbTPkZLGZ3foreMwWwO2qDZpPIAWZMPQ7\nV+4Wz9cn+WAA6mzjZdbPmO5N2C7tm4axZDjvwdOCw1MV/+WEQYF/HxRiTYIM\nNjGF0rk+lAq2V9aul8VeBgV14ISNmZT0EOyR5HKJtOzRjvAYj20gcDhLIj/A\nJeTH+ol3UQd8PkjvDapJ2Qr6gHs0YcVqB6Bhgc5qfsYonBIb5f4p1lWHIUC6\nuN0N3TJztg5C9PxQBiopHtQntG7O4XbZM7v1GiWVyc3opOlNmbKHubwZOBzP\nxHCcrUTC0v98V7BKKdAEH5kjoBwijQYV5Dfat7NIdLiGcF+fID+d2Q6HlpLg\ndyS8g4czKT0hFLTq4pIZsE/1KdofaV5C3ioI9hNScxoWLvru4E8xV7TFwfvW\nfjWKLZO+oN2glG+uNsCPVY1ARSwUbvyfuIRjvFmysYzRxpYFJwEk80q4lED5\n4feys2L7vUnp45H0f3TCmvZyKSc4HDBFVulHFLPz8XlZ6oYykTUsakP5aW37\n4LYP+D5d7zzrm0UHmSv/nX84xSxCDiCh9+69HsHhclylSKL1WQfK4POCA9pB\nyKKb\r\n=bMOQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/hotp","gitHead":"5ae385c33c9a390c32d7eeb3d89e5bf7c6fded31","scripts":{"test":"mocha"},"_npmUser":{"name":"jhermsmeier","email":"jhermsmeier@gmail.com"},"repository":{"url":"git+https://github.com/jhermsmeier/node-hotp.git","type":"git"},"_npmVersion":"6.5.0","description":"HMAC-Based One-Time Password (HOTP), and Time-Based One-Time Password (TOTP) Algorithms","directories":{},"_nodeVersion":"11.8.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hotp_2.0.0_1549012935341_0.8908268635545677","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"hotp","version":"3.0.0","keywords":["hotp","totp","otp","rfc4226","rfc 4226","4226","rfc6238","rfc 6238","6238","one-time password","two-factor authentication","two-factor","2fa","authentication","authenticator","hmac","hmac-based","time-based"],"author":{"url":"https://jhermsmeier.de","name":"Jonas Hermsmeier","email":"jhermsmeier@gmail.com"},"license":"MIT","_id":"hotp@3.0.0","maintainers":[{"name":"jhermsmeier","email":"jhermsmeier@gmail.com"}],"homepage":"https://github.com/jhermsmeier/node-hotp","bugs":{"url":"https://github.com/jhermsmeier/node-hotp/issues"},"dist":{"shasum":"302621ab91dc4bd27ab08c5261eb395f43ec782a","tarball":"https://registry.npmjs.org/hotp/-/hotp-3.0.0.tgz","fileCount":5,"integrity":"sha512-ur7S7DeT2Sg/JF8v5mDxo7iX2nI54RzEri2/szjq9xW+Nwr2OOBG7zWmGOfuhYrSI6WySHc03I5x6nbBUTphCA==","signatures":[{"sig":"MEUCIQCdhmuFDrlfCdG5YcXm67D7+al/zcp/4SYIQ/QtIKjlAQIgYMH3u+t7BbkYiqa2iLJF6Ls4AMUeLzi6v7Z7zHlNoYE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":6804,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcf/uNCRA9TVsSAnZWagAAJe4P/1yI+fyYEH++Ub3m0hnO\nAE7PhRly0JF9hCA/EcWcxVPfB6mda4J3KCkc5JkVfdTPLZY2P8GkExqZs/e3\nMoJCjSqtmCfgW86i/VZNA3r6jEv0ZsKclXFU1aXCxmSCm28hN6hvYgq2uxKg\nUjpVX72fobugAvfN45dL6boHy1uFIaVBJ5MCq5uc/5bdjsUouVQRN6Tg/j1S\nTK3EAg1MHjaD28v5oeyGdwCVIkskosSJGdK2n0VUosK+j+JjiP+32PZo8C6O\nne1YNBxr5P7c/ud2vYTsxt7hmjmsV7GdgGHoyijEibGU4p+xxnIezdFGYtd7\nn1hkmr7Rns8fKNbBm0sjzNqXwjWKPZFXat1A8EKkoOLw9mNjSHabJjBP4WhC\nmkw9yvkkwQAv6Hf/ckd8rnek+EM3DSu6Tk+oNtemN4dJWp57kc+Yo5TVMGAd\nv5gYTf6Kq5C67TVEcoPF6kv1HVoiULgvWBN+2Ejah+QUlpaDUa/L/0eN+n3f\noFy+6If73aiFUk+gF/zBBrqJ421aUwIrV2ujVkS4J9tO5EbZXNu2gJxNQ/b0\nNNd3Y90peUlXlvy9SuO4c1HHx4zhdJSl70D+ngkLOWqOMrmIrhzw4HrxKq+G\n6yohE0PkzWaHCyy0E7Cvv3HF/7gDunc0gjK+XTkyLs5L/eZOgJmiMBCAJ48p\n7bbU\r\n=JIWJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/hotp","gitHead":"8bb152c2e314f18a95f138d8aaf4897b85fce9af","scripts":{"test":"mocha"},"_npmUser":{"name":"jhermsmeier","email":"jhermsmeier@gmail.com"},"repository":{"url":"git+https://github.com/jhermsmeier/node-hotp.git","type":"git"},"_npmVersion":"6.7.0","description":"HMAC-Based One-Time Password (HOTP), and Time-Based One-Time Password (TOTP) Algorithms","directories":{},"_nodeVersion":"11.10.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hotp_3.0.0_1551891341159_0.8769055797638585","host":"s3://npm-registry-packages"}},"3.0.1":{"name":"hotp","version":"3.0.1","description":"HMAC-Based One-Time Password (HOTP), and Time-Based One-Time Password (TOTP) Algorithms","author":{"name":"Jonas Hermsmeier","email":"jhermsmeier@gmail.com","url":"https://jhermsmeier.de"},"license":"MIT","keywords":["hotp","totp","otp","rfc4226","rfc 4226","4226","rfc6238","rfc 6238","6238","one-time password","two-factor authentication","two-factor","2fa","authentication","authenticator","hmac","hmac-based","time-based"],"main":"lib/hotp","scripts":{"test":"control"},"devDependencies":{"@jhermsmeier/control":"2.0.3"},"homepage":"https://codeberg.org/jhermsmeier/node-hotp","repository":{"type":"git","url":"https://codeberg.org/jhermsmeier/node-hotp.git"},"bugs":{"url":"https://codeberg.org/jhermsmeier/node-hotp/issues"},"_id":"hotp@3.0.1","gitHead":"290cd27a9bf98b5774a27c24ee517de67c0ecbca","_nodeVersion":"23.9.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-HrYglCDv1BfWIUxazowavtncNUqHM1XVGpIdSnlkDCDpNbsNZ9uxPSjVpVD3YUW3VD32LT2CX2fQu07DL/H50Q==","shasum":"383f4f63f31c993dd4abfe09d596e76c9c391511","tarball":"https://registry.npmjs.org/hotp/-/hotp-3.0.1.tgz","fileCount":5,"unpackedSize":6664,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDuXBOEf2fv+2OkwPCe/Trm34ruUSZWARNy+oYcg69lggIhAKvuspw5WdITxhxBioduVOlXZi+7mTMNh0lGVy7YM21Q"}]},"_npmUser":{"name":"jhermsmeier","email":"jhermsmeier@gmail.com"},"directories":{},"maintainers":[{"name":"jhermsmeier","email":"jhermsmeier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hotp_3.0.1_1741021407572_0.07329240461941544"},"_hasShrinkwrap":false}},"time":{"created":"2019-01-30T21:06:28.807Z","modified":"2025-03-03T17:03:27.911Z","1.0.0":"2019-01-30T21:06:28.938Z","2.0.0":"2019-02-01T09:22:15.485Z","3.0.0":"2019-03-06T16:55:41.323Z","3.0.1":"2025-03-03T17:03:27.754Z"},"bugs":{"url":"https://codeberg.org/jhermsmeier/node-hotp/issues"},"author":{"name":"Jonas Hermsmeier","email":"jhermsmeier@gmail.com","url":"https://jhermsmeier.de"},"license":"MIT","homepage":"https://codeberg.org/jhermsmeier/node-hotp","keywords":["hotp","totp","otp","rfc4226","rfc 4226","4226","rfc6238","rfc 6238","6238","one-time password","two-factor authentication","two-factor","2fa","authentication","authenticator","hmac","hmac-based","time-based"],"repository":{"type":"git","url":"https://codeberg.org/jhermsmeier/node-hotp.git"},"description":"HMAC-Based One-Time Password (HOTP), and Time-Based One-Time Password (TOTP) Algorithms","maintainers":[{"name":"jhermsmeier","email":"jhermsmeier@gmail.com"}],"readme":"# HOTP TOTP\n[![npm](https://img.shields.io/npm/v/hotp.svg?style=flat-square)](https://npmjs.com/package/hotp)\n[![npm license](https://img.shields.io/npm/l/hotp.svg?style=flat-square)](https://npmjs.com/package/hotp)\n[![npm downloads](https://img.shields.io/npm/dm/hotp.svg?style=flat-square)](https://npmjs.com/package/hotp)\n\nHMAC-Based One-Time Password (HOTP), and Time-Based One-Time Password (TOTP) Algorithms\n\n## Install via [npm](https://npmjs.com)\n\n```sh\n$ npm install --save hotp\n```\n\n## Changelog\n\n- **v3.0.0**: Removed CLI utilities – now to be found at [jhermsmeier / hotp-totp-cli](https://github.com/jhermsmeier/hotp-totp-cli)\n- **v2.0.0**: Added TOTP implementation\n- **v1.0.0**: Initial release\n\n## Usage\n\n### HOTP\n\n#### hotp( key, counter[, options] )\n\n- `key` {Buffer|String}\n- `counter` {Buffer|String|Number}\n- `options` {Object}\n  - `algorithm` {Number} **Default:** `'sha1'`\n  - `digits` {Number} **Default:** `6`\n- Returns {String}\n\n#### Example\n\n```js\nvar hotp = require( 'hotp' )\n\nvar key = 'a very secret key'\nvar counter = 0\n\nvar token = hotp( key, counter, { digits: 8 })\n\nconsole.log( token ) // > '78035651'\n```\n\n### TOTP\n\n#### hotp.totp( key[, options] )\n\n- `key` {Buffer|String}\n- `options` {Object}\n  - `algorithm` {Number} **Default:** `'sha1'`\n  - `digits` {Number} **Default:** `6`\n  - `time` {Number} **Default:** `(Date.now() / 1000)`\n  - `timeStep` {Number} **Default:** `30`\n  - `t0` {Number} **Default:** `0`\n- Returns {String}\n\n#### Example\n\n```js\nvar hotp = require( 'hotp' )\n\nvar key = 'a very secret key'\nvar token = hotp.totp( key, { digits: 8 })\n\nconsole.log( token ) // > '86247382'\n```\n\n## References\n\n- [RFC 4226, HOTP: An HMAC-Based One-Time Password Algorithm](https://tools.ietf.org/html/rfc4226)\n- [RFC 6238, TOTP: Time-Based One-Time Password Algorithm](https://tools.ietf.org/html/rfc6238)\n","readmeFilename":"README.md"}