X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Ftotp.js;h=15aa01e26e3ec13509b83060be109c527b907197;hb=b2ea475512479827a8899b72356f52010a3b4a9c;hp=a305193e7dde085bc4ba7a76bef1814e1fa9acf6;hpb=2207e51e71606cbd1b4e3a688d450a79853dc8e9;p=squeep-totp diff --git a/lib/totp.js b/lib/totp.js index a305193..15aa01e 100644 --- a/lib/totp.js +++ b/lib/totp.js @@ -19,13 +19,13 @@ class TimeBasedOneTimePassword extends HOTP { const _options = { ...options }; super(_options); this.driftOffsets = [ - 0n, // check now first + 0n, // Check now first ...Array.from({ length: this.driftBackward }, (v, k) => BigInt(-(k + 1))), ...Array.from({ length: this.driftForward }, (v, k) => BigInt(k + 1)), ]; } - get _algorithmKeyLengths() { + static get _algorithmKeyLengths() { return { ...super._algorithmKeyLengths, 'sha256': 32, @@ -33,14 +33,24 @@ class TimeBasedOneTimePassword extends HOTP { }; } + /** + * The type used when constructing the otpauth URI. + */ + static get _type() { + return 'totp'; + } + + /** + * Derive counter from epoch. + */ get counter() { const epoch = Math.floor(Date.now() / 1000); return BigInt(Math.floor((epoch - this.timeStepStartSeconds) / this.timeStepSeconds)); } - set counter(_) { /* */ } + set counter(_) { /* Ignore assignment */ } // eslint-disable-line class-methods-use-this - get _defaultOptions() { + static get _defaultOptions() { const options = Object.assign(super._defaultOptions, { timeStepSeconds: 30, timeStepStartSeconds: 0, @@ -51,6 +61,11 @@ class TimeBasedOneTimePassword extends HOTP { return options; } + /** + * + * @param {BigInt=} count + * @returns {String} + */ generate(count = this.counter) { return super.generate(count); } @@ -71,7 +86,7 @@ class TimeBasedOneTimePassword extends HOTP { } return false; } - + } module.exports = TimeBasedOneTimePassword;