{"version":3,"file":"otpauth.umd.min.js","sources":["../src/utils/encoding/uint.js","../node_modules/jssha/dist/sha.mjs","../src/utils/global-scope.js","../src/utils/crypto/hmac-digest.js","../src/utils/pad.js","../src/utils/encoding/base32.js","../src/utils/encoding/hex.js","../src/utils/encoding/latin1.js","../src/utils/encoding/utf8.js","../src/utils/crypto/random-bytes.js","../src/secret.js","../src/utils/crypto/timing-safe-equal.js","../src/hotp.js","../src/totp.js","../src/uri.js","../src/version.js"],"sourcesContent":["/**\n * Converts an integer to an ArrayBuffer.\n * @param {number} num Integer.\n * @returns {ArrayBuffer} ArrayBuffer.\n */\nconst uintToBuf = (num) => {\n const buf = new ArrayBuffer(8);\n const arr = new Uint8Array(buf);\n let acc = num;\n\n for (let i = 7; i >= 0; i--) {\n if (acc === 0) break;\n arr[i] = acc & 255;\n acc -= arr[i];\n acc /= 256;\n }\n\n return buf;\n};\n\n/**\n * Converts an ArrayBuffer to an integer.\n * @param {ArrayBuffer} buf ArrayBuffer.\n * @returns {number} Integer.\n */\nconst uintFromBuf = (buf) => {\n const arr = new Uint8Array(buf);\n let num = 0;\n\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] !== 0) {\n num *= 256;\n num += arr[i];\n }\n }\n\n return num;\n};\n\nexport { uintToBuf, uintFromBuf };\n","/**\n * A JavaScript implementation of the SHA family of hashes - defined in FIPS PUB 180-4, FIPS PUB 202,\n * and SP 800-185 - as well as the corresponding HMAC implementation as defined in FIPS PUB 198-1.\n *\n * Copyright 2008-2022 Brian Turek, 1998-2009 Paul Johnston & Contributors\n * Distributed under the BSD License\n * See http://caligatio.github.com/jsSHA/ for more information\n */\nconst t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";function n(t,n,e,r){let i,s,o;const h=n||[0],u=(e=e||0)>>>3,w=-1===r?3:0;for(i=0;i>>2,h.length<=s&&h.push(0),h[s]|=t[i]<<8*(w+r*(o%4));return{value:h,binLen:8*t.length+e}}function e(e,r,i){switch(r){case\"UTF8\":case\"UTF16BE\":case\"UTF16LE\":break;default:throw new Error(\"encoding must be UTF8, UTF16BE, or UTF16LE\")}switch(e){case\"HEX\":return function(t,n,e){return function(t,n,e,r){let i,s,o,h;if(0!=t.length%2)throw new Error(\"String of HEX type must be in byte increments\");const u=n||[0],w=(e=e||0)>>>3,c=-1===r?3:0;for(i=0;i>>1)+w,o=h>>>2;u.length<=o;)u.push(0);u[o]|=s<<8*(c+r*(h%4))}return{value:u,binLen:4*t.length+e}}(t,n,e,i)};case\"TEXT\":return function(t,n,e){return function(t,n,e,r,i){let s,o,h,u,w,c,f,a,l=0;const A=e||[0],E=(r=r||0)>>>3;if(\"UTF8\"===n)for(f=-1===i?3:0,h=0;hs?o.push(s):2048>s?(o.push(192|s>>>6),o.push(128|63&s)):55296>s||57344<=s?o.push(224|s>>>12,128|s>>>6&63,128|63&s):(h+=1,s=65536+((1023&s)<<10|1023&t.charCodeAt(h)),o.push(240|s>>>18,128|s>>>12&63,128|s>>>6&63,128|63&s)),u=0;u>>2;A.length<=w;)A.push(0);A[w]|=o[u]<<8*(f+i*(c%4)),l+=1}else for(f=-1===i?2:0,a=\"UTF16LE\"===n&&1!==i||\"UTF16LE\"!==n&&1===i,h=0;h>>8),c=l+E,w=c>>>2;A.length<=w;)A.push(0);A[w]|=s<<8*(f+i*(c%4)),l+=2}return{value:A,binLen:8*l+r}}(t,r,n,e,i)};case\"B64\":return function(n,e,r){return function(n,e,r,i){let s,o,h,u,w,c,f,a=0;const l=e||[0],A=(r=r||0)>>>3,E=-1===i?3:0,H=n.indexOf(\"=\");if(-1===n.search(/^[a-zA-Z0-9=+/]+$/))throw new Error(\"Invalid character in base-64 string\");if(n=n.replace(/=/g,\"\"),-1!==H&&H {\n if (crypto?.timingSafeEqual) {\n return crypto.timingSafeEqual(\n globalScope.Buffer.from(a),\n globalScope.Buffer.from(b)\n );\n } else {\n if (a.length !== b.length) {\n throw new TypeError(\"Input strings must have the same length\");\n }\n let i = -1;\n let out = 0;\n while (++i < a.length) {\n out |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n return out === 0;\n }\n};\n\nexport { timingSafeEqual };\n","import { uintToBuf } from \"./utils/encoding/uint.js\";\nimport { hmacDigest } from \"./utils/crypto/hmac-digest.js\";\nimport { pad } from \"./utils/pad.js\";\nimport { Secret } from \"./secret.js\";\nimport { timingSafeEqual } from \"./utils/crypto/timing-safe-equal.js\";\n\n/**\n * HOTP: An HMAC-based One-time Password Algorithm.\n * @see [RFC 4226](https://tools.ietf.org/html/rfc4226)\n */\nclass HOTP {\n /**\n * Default configuration.\n * @type {{\n * issuer: string,\n * label: string,\n * algorithm: string,\n * digits: number,\n * counter: number\n * window: number\n * }}\n */\n static get defaults() {\n return {\n issuer: \"\",\n label: \"OTPAuth\",\n algorithm: \"SHA1\",\n digits: 6,\n counter: 0,\n window: 1,\n };\n }\n\n /**\n * Creates an HOTP object.\n * @param {Object} [config] Configuration options.\n * @param {string} [config.issuer=''] Account provider.\n * @param {string} [config.label='OTPAuth'] Account label.\n * @param {Secret|string} [config.secret=Secret] Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.counter=0] Initial counter value.\n */\n constructor({\n issuer = HOTP.defaults.issuer,\n label = HOTP.defaults.label,\n secret = new Secret(),\n algorithm = HOTP.defaults.algorithm,\n digits = HOTP.defaults.digits,\n counter = HOTP.defaults.counter,\n } = {}) {\n /**\n * Account provider.\n * @type {string}\n */\n this.issuer = issuer;\n /**\n * Account label.\n * @type {string}\n */\n this.label = label;\n /**\n * Secret key.\n * @type {Secret}\n */\n this.secret =\n typeof secret === \"string\" ? Secret.fromBase32(secret) : secret;\n /**\n * HMAC hashing algorithm.\n * @type {string}\n */\n this.algorithm = algorithm.toUpperCase();\n /**\n * Token length.\n * @type {number}\n */\n this.digits = digits;\n /**\n * Initial counter value.\n * @type {number}\n */\n this.counter = counter;\n }\n\n /**\n * Generates an HOTP token.\n * @param {Object} config Configuration options.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.counter=0] Counter value.\n * @returns {string} Token.\n */\n static generate({\n secret,\n algorithm = HOTP.defaults.algorithm,\n digits = HOTP.defaults.digits,\n counter = HOTP.defaults.counter,\n }) {\n const digest = new Uint8Array(\n hmacDigest(algorithm, secret.buffer, uintToBuf(counter))\n );\n const offset = digest[digest.byteLength - 1] & 15;\n const otp =\n (((digest[offset] & 127) << 24) |\n ((digest[offset + 1] & 255) << 16) |\n ((digest[offset + 2] & 255) << 8) |\n (digest[offset + 3] & 255)) %\n 10 ** digits;\n\n return pad(otp, digits);\n }\n\n /**\n * Generates an HOTP token.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.counter=this.counter++] Counter value.\n * @returns {string} Token.\n */\n generate({ counter = this.counter++ } = {}) {\n return HOTP.generate({\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n counter,\n });\n }\n\n /**\n * Validates an HOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} config.digits Token length.\n * @param {number} [config.counter=0] Counter value.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */\n static validate({\n token,\n secret,\n algorithm,\n digits,\n counter = HOTP.defaults.counter,\n window = HOTP.defaults.window,\n }) {\n // Return early if the token length does not match the digit number.\n if (token.length !== digits) return null;\n\n let delta = null;\n\n for (let i = counter - window; i <= counter + window; ++i) {\n const generatedToken = HOTP.generate({\n secret,\n algorithm,\n digits,\n counter: i,\n });\n\n if (timingSafeEqual(token, generatedToken)) {\n delta = i - counter;\n }\n }\n\n return delta;\n }\n\n /**\n * Validates an HOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {number} [config.counter=this.counter] Counter value.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */\n validate({ token, counter = this.counter, window }) {\n return HOTP.validate({\n token,\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n counter,\n window,\n });\n }\n\n /**\n * Returns a Google Authenticator key URI.\n * @returns {string} URI.\n */\n toString() {\n const e = encodeURIComponent;\n return (\n \"otpauth://hotp/\" +\n `${\n this.issuer.length > 0\n ? `${e(this.issuer)}:${e(this.label)}?issuer=${e(this.issuer)}&`\n : `${e(this.label)}?`\n }` +\n `secret=${e(this.secret.base32)}&` +\n `algorithm=${e(this.algorithm)}&` +\n `digits=${e(this.digits)}&` +\n `counter=${e(this.counter)}`\n );\n }\n}\n\nexport { HOTP };\n","import { HOTP } from \"./hotp.js\";\nimport { Secret } from \"./secret.js\";\n\n/**\n * TOTP: Time-Based One-Time Password Algorithm.\n * @see [RFC 6238](https://tools.ietf.org/html/rfc6238)\n */\nclass TOTP {\n /**\n * Default configuration.\n * @type {{\n * issuer: string,\n * label: string,\n * algorithm: string,\n * digits: number,\n * period: number\n * window: number\n * }}\n */\n static get defaults() {\n return {\n issuer: \"\",\n label: \"OTPAuth\",\n algorithm: \"SHA1\",\n digits: 6,\n period: 30,\n window: 1,\n };\n }\n\n /**\n * Creates a TOTP object.\n * @param {Object} [config] Configuration options.\n * @param {string} [config.issuer=''] Account provider.\n * @param {string} [config.label='OTPAuth'] Account label.\n * @param {Secret|string} [config.secret=Secret] Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.period=30] Token time-step duration.\n */\n constructor({\n issuer = TOTP.defaults.issuer,\n label = TOTP.defaults.label,\n secret = new Secret(),\n algorithm = TOTP.defaults.algorithm,\n digits = TOTP.defaults.digits,\n period = TOTP.defaults.period,\n } = {}) {\n /**\n * Account provider.\n * @type {string}\n */\n this.issuer = issuer;\n /**\n * Account label.\n * @type {string}\n */\n this.label = label;\n /**\n * Secret key.\n * @type {Secret}\n */\n this.secret =\n typeof secret === \"string\" ? Secret.fromBase32(secret) : secret;\n /**\n * HMAC hashing algorithm.\n * @type {string}\n */\n this.algorithm = algorithm.toUpperCase();\n /**\n * Token length.\n * @type {number}\n */\n this.digits = digits;\n /**\n * Token time-step duration.\n * @type {number}\n */\n this.period = period;\n }\n\n /**\n * Generates a TOTP token.\n * @param {Object} config Configuration options.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {string} Token.\n */\n static generate({\n secret,\n algorithm,\n digits,\n period = TOTP.defaults.period,\n timestamp = Date.now(),\n }) {\n return HOTP.generate({\n secret,\n algorithm,\n digits,\n counter: Math.floor(timestamp / 1000 / period),\n });\n }\n\n /**\n * Generates a TOTP token.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {string} Token.\n */\n generate({ timestamp = Date.now() } = {}) {\n return TOTP.generate({\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n period: this.period,\n timestamp,\n });\n }\n\n /**\n * Validates a TOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} config.digits Token length.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */\n static validate({\n token,\n secret,\n algorithm,\n digits,\n period = TOTP.defaults.period,\n timestamp = Date.now(),\n window,\n }) {\n return HOTP.validate({\n token,\n secret,\n algorithm,\n digits,\n counter: Math.floor(timestamp / 1000 / period),\n window,\n });\n }\n\n /**\n * Validates a TOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */\n validate({ token, timestamp, window }) {\n return TOTP.validate({\n token,\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n period: this.period,\n timestamp,\n window,\n });\n }\n\n /**\n * Returns a Google Authenticator key URI.\n * @returns {string} URI.\n */\n toString() {\n const e = encodeURIComponent;\n return (\n \"otpauth://totp/\" +\n `${\n this.issuer.length > 0\n ? `${e(this.issuer)}:${e(this.label)}?issuer=${e(this.issuer)}&`\n : `${e(this.label)}?`\n }` +\n `secret=${e(this.secret.base32)}&` +\n `algorithm=${e(this.algorithm)}&` +\n `digits=${e(this.digits)}&` +\n `period=${e(this.period)}`\n );\n }\n}\n\nexport { TOTP };\n","import { HOTP } from \"./hotp.js\";\nimport { TOTP } from \"./totp.js\";\n\n/**\n * Key URI regex (otpauth://TYPE/[ISSUER:]LABEL?PARAMETERS).\n * @type {RegExp}\n */\nconst OTPURI_REGEX =\n /^otpauth:\\/\\/([ht]otp)\\/(.+)\\?([A-Z0-9.~_-]+=[^?&]*(?:&[A-Z0-9.~_-]+=[^?&]*)*)$/i;\n\n/**\n * RFC 4648 base32 alphabet with pad.\n * @type {RegExp}\n */\nconst SECRET_REGEX = /^[2-7A-Z]+=*$/i;\n\n/**\n * Regex for supported algorithms.\n * @type {RegExp}\n */\nconst ALGORITHM_REGEX = /^SHA(?:1|224|256|384|512|3-224|3-256|3-384|3-512)$/i;\n\n/**\n * Integer regex.\n * @type {RegExp}\n */\nconst INTEGER_REGEX = /^[+-]?\\d+$/;\n\n/**\n * Positive integer regex.\n * @type {RegExp}\n */\nconst POSITIVE_INTEGER_REGEX = /^\\+?[1-9]\\d*$/;\n\n/**\n * HOTP/TOTP object/string conversion.\n * @see [Key URI Format](https://github.com/google/google-authenticator/wiki/Key-Uri-Format)\n */\nclass URI {\n /**\n * Parses a Google Authenticator key URI and returns an HOTP/TOTP object.\n * @param {string} uri Google Authenticator Key URI.\n * @returns {HOTP|TOTP} HOTP/TOTP object.\n */\n static parse(uri) {\n let uriGroups;\n\n try {\n uriGroups = uri.match(OTPURI_REGEX);\n } catch (error) {\n /* Handled below */\n }\n\n if (!Array.isArray(uriGroups)) {\n throw new URIError(\"Invalid URI format\");\n }\n\n // Extract URI groups.\n const uriType = uriGroups[1].toLowerCase();\n const uriLabel = uriGroups[2]\n .split(/(?::|%3A) *(.+)/i, 2)\n .map(decodeURIComponent);\n /** @type {Object.} */\n const uriParams = uriGroups[3].split(\"&\").reduce((acc, cur) => {\n const pairArr = cur.split(/=(.*)/, 2).map(decodeURIComponent);\n const pairKey = pairArr[0].toLowerCase();\n const pairVal = pairArr[1];\n /** @type {Object.} */\n const pairAcc = acc;\n\n pairAcc[pairKey] = pairVal;\n return pairAcc;\n }, {});\n\n // 'OTP' will be instantiated with 'config' argument.\n let OTP;\n const config = {};\n\n if (uriType === \"hotp\") {\n OTP = HOTP;\n\n // Counter: required\n if (\n typeof uriParams.counter !== \"undefined\" &&\n INTEGER_REGEX.test(uriParams.counter)\n ) {\n config.counter = parseInt(uriParams.counter, 10);\n } else {\n throw new TypeError(\"Missing or invalid 'counter' parameter\");\n }\n } else if (uriType === \"totp\") {\n OTP = TOTP;\n\n // Period: optional\n if (typeof uriParams.period !== \"undefined\") {\n if (POSITIVE_INTEGER_REGEX.test(uriParams.period)) {\n config.period = parseInt(uriParams.period, 10);\n } else {\n throw new TypeError(\"Invalid 'period' parameter\");\n }\n }\n } else {\n throw new TypeError(\"Unknown OTP type\");\n }\n\n // Label: required\n // Issuer: optional\n if (uriLabel.length === 2) {\n config.label = uriLabel[1];\n config.issuer = uriLabel[0];\n } else {\n config.label = uriLabel[0];\n if (typeof uriParams.issuer !== \"undefined\") {\n config.issuer = uriParams.issuer;\n }\n }\n\n // Secret: required\n if (\n typeof uriParams.secret !== \"undefined\" &&\n SECRET_REGEX.test(uriParams.secret)\n ) {\n config.secret = uriParams.secret;\n } else {\n throw new TypeError(\"Missing or invalid 'secret' parameter\");\n }\n\n // Algorithm: optional\n if (typeof uriParams.algorithm !== \"undefined\") {\n if (ALGORITHM_REGEX.test(uriParams.algorithm)) {\n config.algorithm = uriParams.algorithm;\n } else {\n throw new TypeError(\"Invalid 'algorithm' parameter\");\n }\n }\n\n // Digits: optional\n if (typeof uriParams.digits !== \"undefined\") {\n if (POSITIVE_INTEGER_REGEX.test(uriParams.digits)) {\n config.digits = parseInt(uriParams.digits, 10);\n } else {\n throw new TypeError(\"Invalid 'digits' parameter\");\n }\n }\n\n return new OTP(config);\n }\n\n /**\n * Converts an HOTP/TOTP object to a Google Authenticator key URI.\n * @param {HOTP|TOTP} otp HOTP/TOTP object.\n * @returns {string} Google Authenticator Key URI.\n */\n static stringify(otp) {\n if (otp instanceof HOTP || otp instanceof TOTP) {\n return otp.toString();\n }\n\n throw new TypeError(\"Invalid 'HOTP/TOTP' object\");\n }\n}\n\nexport { URI };\n","/**\n * Library version.\n * @type {string}\n */\nconst version = \"__OTPAUTH_VERSION__\";\n\nexport { version };\n"],"names":["uintToBuf","num","buf","ArrayBuffer","arr","Uint8Array","acc","i","b64Tab","uint8array2packed","existingPacked","existingPackedLen","bigEndianMod","intOffset","byteOffset","packed","existingByteLen","shiftModifier","length","push","value","binLen","getStrConverter","format","utfType","Error","str","existingBin","existingBinLen","parseInt","substr","isNaN","hex2packed","codePnt","codePntArr","j","transposeBytes","byteCnt","charCodeAt","str2packed","index","tmpInt","strPart","firstEqual","indexOf","search","replace","charAt","b642packed","bytes2packed","ignore","arraybuffer2packed","getOutputConverter","outputBinLen","outputOptions","binarray","outputLength","formatOpts","hex_tab","srcByte","outputUpper","toUpperCase","packed2hex","triplet","int1","int2","b64Pad","packed2b64","String","fromCharCode","retVal","arrView","globalScope","globalThis","Object","defineProperty","prototype","get","configurable","__GLOBALTHIS__","self","window","global","OPENSSL_JSSHA_ALGO_MAP","SHA1","SHA224","SHA256","SHA384","SHA512","hmacDigest","algorithm","key","message","crypto","variant","TypeError","hmac","jsSHA","setHMACKey","update","getHMAC","pad","digits","prefix","repeat","ALPHABET","base32ToBuf","end","cstr","substring","bits","idx","base32FromBuf","hexToBuf","hexFromBuf","hex","toString","latin1ToBuf","latin1FromBuf","ENCODER","TextEncoder","DECODER","TextDecoder","utf8ToBuf","encode","buffer","utf8FromBuf","decode","randomBytes","size","getRandomValues","Secret","constructor","fromLatin1","fromUTF8","fromBase32","fromHex","latin1","enumerable","utf8","base32","timingSafeEqual","a","b","out","g","defaults","issuer","label","counter","HOTP","secret","generate","_ref","digest","offset","byteLength","otp","__pow","validate","_ref2","token","delta","generatedToken","_ref3","e","encodeURIComponent","TOTP","period","timestamp","Date","now","Math","floor","OTPURI_REGEX","SECRET_REGEX","ALGORITHM_REGEX","INTEGER_REGEX","POSITIVE_INTEGER_REGEX","URI","parse","uri","uriGroups","match","error","Array","isArray","URIError","uriType","toLowerCase","uriLabel","split","map","decodeURIComponent","uriParams","reduce","cur","pairArr","pairKey","pairVal","pairAcc","OTP","config","test","stringify","version"],"mappings":"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"}