1.0.0 • Published 25 days ago

@zibuthe7j11/fugit-et-atque v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
25 days ago

OTP io

Typed library to work 2fa via Google Authenticator/Time-based TOTP/Hmac-based HOTP

Test Status Downloads last commit codecov GitHub @zibuthe7j11/fugit-et-atque Known Vulnerabilities Quality npm license MIT Size

Example API Reference

Why use this lib?

Install

  • npm
    npm i @zibuthe7j11/fugit-et-atque
  • Yarn
    yarn add @zibuthe7j11/fugit-et-atque

What is this?

  • HOTP - HMAC-based One Time Password generation method. Uses incrementing with each login counter and secret to generate unique 6-8 digit codes.
  • TOTP - Time-based, uses current time modulo period (seconds) as counter in HOTP,
  • Google Authenticator - uses simplified version of TOTP to generate codes. Differences:
    • Only SHA-1 hash support
    • Only 6 digit codes
    • Keys should not be padded
    • TOTP period is 30 seconds

Google Authenticator limits are defaults for this library.

How it works?

// 1. Import library - use totp (code changes with time)
import { totp, generateKey, getKeyUri } from "@zibuthe7j11/fugit-et-atque";
// 2. Import crypto adapter. Either `crypto-node` or `crypto-web` - API is identical
import { hmac, randomBytes } from "@zibuthe7j11/fugit-et-atque/crypto-node";

// 3. Get key from somewhere. Or generate it
const key = generateKey(randomBytes, /* bytes: */ 20); // 5-20 good for Google Authenticator

// 4. Get key import url
const url = getKeyUri({
  type: "totp",
  secret,
  name: "User's Username",
  issuer: "Your Site Name"
});

// 5. Show it to user as QR code - send it back to client
// Get 6-digit code back from him, as confirmation of saving secret key

const input = "...";

const code = await totp(hmac, { secret });

if (code === input) {
  // 6. Done. User configured your key
}

Api Reference

API Reference

columnsiterationparentsremovedependenciestake$.extendSymbol.toStringTagcurriedpostcss-pluginsetterdeep-copytoSortedvalidatorautoprefixerECMAScript 2023parentpasswordquerystringapolloString.prototype.matchAllformatkarmaparserprotocol-bufferscolumnchinesefast-copyECMAScript 3chromiumwaapideterministicredux-toolkitjsdomviewmake dirnodefsreactmrutslibArrayBuffer#sliceES8folderArray.prototype.flatObjectes6Uint8ClampedArrayECMAScript 2018dotenvstreamexpresscompile lesssetuploggerfiltereventDispatchertrimtostringtagtranspileObject.isvariables in cssgroupByajvstablebundlingemitassignRFC-6455whatwgArray.prototype.includeshelperstacitidlepnpm9ES2019matchAlldragMicrosoftprefixmime-dbnested cssBigInt64Arraycontainsless compilerhookformtapstructuredClonetimeprotobyteOffsettermregexp0objlinuxSymbolerror-handlingstylesheetxhrbyteLengthcalljavascriptlazydeepclonedescriptioncharacterjsonpathcodestrimEndreact-testing-librarypersistentargsES6loadingESnextqueryintrinsicsetPrototypeOfsyntaxerrorshamObject.valueswrapphonehttpssignalelectronsharedarraybufferwhichUint8ArraywindowsCSSrm -rfstartersuperstructgenericsmodulesMapvalidateeveryefficient3ddebugclientECMAScript 2020Array.prototype.findLastsidePushes2018resolvemapperformanceES7Reflect.getPrototypeOffpstringpicomatchmetadataaccessibilitysymbolsnopesortbannerterminalajaxfindLastdataviewESmkdirenvironmentprunecolorsreal-timeopendirectorysequenceratelimitHyBinumberwritableieclassnamevisualcolorgetdayjscjklockfilepromiseECMAScript 5shellincludessyntaxECMAScript 2019reduxbabel-coreimmutableminimalcall-boundtoStringTagbundlersomejestlogstreamsxssdropextenddefinePropertymkdirprmwgetdebuggerJSON-SchemaoptimistES2020utilityforEachpolyfillprogressrequestrfc4122npmreusewebqueueMicrotaskreadable__proto__getPrototypeOftoArrayreadablestreamemojicompilerrgbreact-hook-formlastflagredactArray.prototype.flatMapstreams2negative zeroencryptionjwtreducetypedarrays256entrieswatcherirqtestcollection.es6jsoptionprocessstringifierescaperm -frmimees7bytecollectionexit-codebrowserlistiteratoreslint-plugindeepcopywarningFloat64Arraycode pointsES2017l10nguidAsyncIteratorprettytypanionfilermdircryptoconcatString.prototype.trimassertsserializeexittesterFunction.prototype.nameinterruptsenderspringeast-asian-widthwaitcall-bindprotobufwriteclisortedbluebirdawesomesauceObject.keyscore-jsfastcopynamepreprocessoryupsearchworkspace:*regular expressionObject.entriesnegativeapiprivate dataansigdprfunctionsslotjson-schema-validatorutilitiesfseventsnames@@toStringTagcss-in-jswalktypeofgetterlinkcss variableinstallerimporthigher-orderdeletevariablesreducerutil.inspectoffsetomitJSONstyleguidevalueclassnamesjsdiffObservablesURLSearchParamsbindstdlibconsoleiterateSetcomparefindup6to5channelserializershimstylesfetchmixinsartasciiRxJSeventEmitterinternalinferencedefineduplextypesafesafecircularjoicolourbusyutilstylingES5dataViewtypescriptglobnativeweaksetECMAScript 2021sanitizationless.jspackagesmocharateYAMLurlWebSocketes2017symlinkslimitbootstrap lesspatchharmonyuuidhandlersRegExp.prototype.flagsfunctiones-abstracttoolsES2021walkingrapidpushvaluesdependency managerclass-validatorUnderscorelook-upgraphqlmomentzoduninstallpluginvalidArray.prototype.filterruntimehttpshrinkwrapgetintrinsicless csscsscallbackbddrequireTypeScriptconsumehasposeponyfillwordwrapfast-deep-copyArraytoobjecthasOwntc39ECMAScript 2022bcryptserializationstatusreact animationbreakdeep-clonea11yCSSStyleDeclarationtranspilerassertInt32ArraydomargvtrimRightArrayBufferinputes5tslrucommandbrowsercss nestingReactiveXtextcurlstyleECMAScript 7Array.prototype.findLastIndexArray.prototype.flattenfile systemsigtermes2016TypedArraypostcssthroatreact-hookstraverse
1.0.0

25 days ago