2fa-hotp-totp
Version:
Zero dependency HOTP/TOTP 2FA
1 lines • 959 B
JavaScript
;exports.__esModule=!0,exports.validate=exports.generate=void 0;var crypto_1=require("crypto"),calcCounter=function(b){var a=Buffer.alloc(8);return a.writeBigInt64BE(BigInt(b),0),a},generate=function(c){var d=c.key,e=c.algorithm,f=c.counter,h=(0,crypto_1.createHmac)(void 0===e?"sha1":e,Buffer.isBuffer(d)?d:Buffer.from(d)).update(calcCounter(void 0===f?0:f)).digest("hex"),a=Buffer.from(h,"hex"),b=15&a[a.length-1],i=(127&a[b])<<24|(255&a[b+1])<<16|(255&a[b+2])<<8|255&a[b+3],g=String(i%1e6);return new Array(7-g.length).join("0")+g};exports.generate=generate;var validate=function(a){for(var d=a.token,k=a.key,e=a.algorithm,l=void 0===e?"sha1":e,f=a.window,g=void 0===f?1:f,h=a.counter,b=void 0===h?0:h,i=b,c=b-g;c<=b+g;++c){i=c;var j=(0,exports.generate)({key:k,algorithm:l,counter:i});if(Buffer.byteLength(d)===Buffer.byteLength(j)&&(0,crypto_1.timingSafeEqual)(Buffer.from(d),Buffer.from(j)))return c-b}return null};exports.validate=validate;