class TimeBasedOneTimePassword extends HOTP {
/**
*
- * @param {Object} options
- * @param {Number} options.codeLength
- * @param {Buffer|String} options.key
- * @param {String} options.keyEncoding
- * @param {String} options.algorithm
- * @param {Number} options.timeStepSeconds
- * @param {Number} options.timeStepStartSeconds
- * @param {Number} options.driftForward
- * @param {Number} options.driftBackward
+ * @param {object} options options
+ * @param {number} options.codeLength digits in code
+ * @param {Buffer|string} options.key secret key
+ * @param {string} options.keyEncoding secret key encoding
+ * @param {string} options.algorithm algorithm
+ * @param {number} options.timeStepSeconds seconds per increment
+ * @param {number} options.timeStepStartSeconds seconds offset
+ * @param {number} options.driftForward allowed future steps to check
+ * @param {number} options.driftBackward allowed past steps to check
*/
constructor(options) {
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)),
];
/**
* The type used when constructing the otpauth URI.
+ * @returns {string} otp auth type
*/
static get _type() {
return 'totp';
/**
* Derive counter from epoch.
+ * @returns {bigint} time based counter
*/
get counter() {
const epoch = Math.floor(Date.now() / 1000);
return BigInt(Math.floor((epoch - this.timeStepStartSeconds) / this.timeStepSeconds));
}
- set counter(_) { /* ignore assignment */ } // eslint-disable-line class-methods-use-this
+ set counter(_) { /* Ignore assignment */ } // eslint-disable-line class-methods-use-this
static get _defaultOptions() {
const options = Object.assign(super._defaultOptions, {
/**
*
- * @param {BigInt=} count
- * @returns {String}
+ * @param {bigint=} count counter value
+ * @returns {string} code
*/
generate(count = this.counter) {
return super.generate(count);
/**
*
- * @param {String} hotp
- * @param {BigInt=} count
- * @returns {Boolean}
+ * @param {string} hotp code
+ * @param {bigint=} count counter value
+ * @returns {boolean} is valid
*/
validate(hotp, count) {
const counter = count ?? this.counter;