{"info":{"author":"Andrey Kislyuk","author_email":"kislyuk@gmail.com","bugtrack_url":null,"classifiers":["Development Status :: 5 - Production/Stable","Intended Audience :: Developers","Operating System :: MacOS :: MacOS X","Operating System :: POSIX","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.8","Programming Language :: Python :: 3.9","Programming Language :: Python :: Implementation :: CPython","Programming Language :: Python :: Implementation :: PyPy","Topic :: Software Development","Topic :: Software Development :: Libraries :: Python Modules"],"description":"PyOTP - The Python One-Time Password Library\n============================================\n\nPyOTP is a Python library for generating and verifying one-time passwords. It can be used to implement two-factor (2FA)\nor multi-factor (MFA) authentication methods in web applications and in other systems that require users to log in.\n\nOpen MFA standards are defined in `RFC 4226 <https://tools.ietf.org/html/rfc4226>`_ (HOTP: An HMAC-Based One-Time\nPassword Algorithm) and in `RFC 6238 <https://tools.ietf.org/html/rfc6238>`_ (TOTP: Time-Based One-Time Password\nAlgorithm). PyOTP implements server-side support for both of these standards. Client-side support can be enabled by\nsending authentication codes to users over SMS or email (HOTP) or, for TOTP, by instructing users to use `Google\nAuthenticator <https://en.wikipedia.org/wiki/Google_Authenticator>`_, `Authy <https://www.authy.com/>`_, or another\ncompatible app. Users can set up auth tokens in their apps easily by using their phone camera to scan `otpauth://\n<https://github.com/google/google-authenticator/wiki/Key-Uri-Format>`_ QR codes provided by PyOTP.\n\nImplementers should read and follow the `HOTP security requirements <https://tools.ietf.org/html/rfc4226#section-7>`_\nand `TOTP security considerations <https://tools.ietf.org/html/rfc6238#section-5>`_ sections of the relevant RFCs. At\nminimum, application implementers should follow this checklist:\n\n- Ensure transport confidentiality by using HTTPS\n- Ensure HOTP/TOTP secret confidentiality by storing secrets in a controlled access database\n- Deny replay attacks by rejecting one-time passwords that have been used by the client (this requires storing the most\n  recently authenticated timestamp, OTP, or hash of the OTP in your database, and rejecting the OTP when a match is\n  seen)\n- Throttle (rate limit) brute-force attacks against your application's login functionality (see RFC 4226, section 7.3)\n- When implementing a \"greenfield\" application, consider supporting\n  `FIDO U2F <https://en.wikipedia.org/wiki/Universal_2nd_Factor>`_/`WebAuthn <https://www.w3.org/TR/webauthn/>`_ in\n  addition to or instead of HOTP/TOTP. U2F uses asymmetric cryptography to avoid using a shared secret design, which\n  strengthens your MFA solution against server-side attacks. Hardware U2F also sequesters the client secret in a\n  dedicated single-purpose device, which strengthens your clients against client-side attacks. And by automating scoping\n  of credentials to relying party IDs (application origin/domain names), U2F adds protection against phishing attacks.\n  One implementation of FIDO U2F/WebAuthn is PyOTP's sister project, `PyWARP <https://github.com/pyauth/pywarp>`_.\n\nWe also recommend that implementers read the\n`OWASP Authentication Cheat Sheet\n<https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Authentication_Cheat_Sheet.md>`_ and\n`NIST SP 800-63-3: Digital Authentication Guideline <https://pages.nist.gov/800-63-3/>`_ for a high level overview of\nauthentication best practices.\n\nQuick overview of using One Time Passwords on your phone\n--------------------------------------------------------\n\n* OTPs involve a shared secret, stored both on the phone and the server\n* OTPs can be generated on a phone without internet connectivity\n* OTPs should always be used as a second factor of authentication (if your phone is lost, you account is still secured\n  with a password)\n* Google Authenticator and other OTP client apps allow you to store multiple OTP secrets and provision those using a QR\n  Code\n\nInstallation\n------------\n::\n\n    pip install pyotp\n\nUsage\n-----\n\nTime-based OTPs\n~~~~~~~~~~~~~~~\n::\n\n    import pyotp\n    import time\n\n    totp = pyotp.TOTP('base32secret3232')\n    totp.now() # => '492039'\n\n    # OTP verified for current time\n    totp.verify('492039') # => True\n    time.sleep(30)\n    totp.verify('492039') # => False\n\nCounter-based OTPs\n~~~~~~~~~~~~~~~~~~\n::\n\n    import pyotp\n    \n    hotp = pyotp.HOTP('base32secret3232')\n    hotp.at(0) # => '260182'\n    hotp.at(1) # => '055283'\n    hotp.at(1401) # => '316439'\n\n    # OTP verified with a counter\n    hotp.verify('316439', 1401) # => True\n    hotp.verify('316439', 1402) # => False\n\nGenerating a Secret Key\n~~~~~~~~~~~~~~~~~~~~~~~\nA helper function is provided to generate a 32-character base32 secret, compatible with Google Authenticator and other\nOTP apps::\n\n    pyotp.random_base32()\n\nSome applications want the secret key to be formatted as a hex-encoded string::\n\n    pyotp.random_hex()  # returns a 40-character hex-encoded secret\n\nGoogle Authenticator Compatible\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nPyOTP works with the Google Authenticator iPhone and Android app, as well as other OTP apps like Authy. PyOTP includes\nthe ability to generate provisioning URIs for use with the QR Code scanner built into these MFA client apps::\n\n    pyotp.totp.TOTP('JBSWY3DPEHPK3PXP').provisioning_uri(name='alice@google.com', issuer_name='Secure App')\n\n    >>> 'otpauth://totp/Secure%20App:alice%40google.com?secret=JBSWY3DPEHPK3PXP&issuer=Secure%20App'\n\n    pyotp.hotp.HOTP('JBSWY3DPEHPK3PXP').provisioning_uri(name=\"alice@google.com\", issuer_name=\"Secure App\", initial_count=0)\n\n    >>> 'otpauth://hotp/Secure%20App:alice%40google.com?secret=JBSWY3DPEHPK3PXP&issuer=Secure%20App&counter=0'\n\nThis URL can then be rendered as a QR Code (for example, using https://github.com/soldair/node-qrcode) which can then be\nscanned and added to the users list of OTP credentials.\n\nParsing these URLs is also supported::\n\n    pyotp.parse_uri('otpauth://totp/Secure%20App:alice%40google.com?secret=JBSWY3DPEHPK3PXP&issuer=Secure%20App')\n\n    >>> <pyotp.totp.TOTP object at 0xFFFFFFFF>\n\n    pyotp.parse_uri('otpauth://hotp/Secure%20App:alice%40google.com?secret=JBSWY3DPEHPK3PXP&issuer=Secure%20App&counter=0'\n\n    >>> <pyotp.totp.HOTP object at 0xFFFFFFFF>\n\nWorking example\n~~~~~~~~~~~~~~~\n\nScan the following barcode with your phone's OTP app (e.g. Google Authenticator):\n\n.. image:: https://quickchart.io/qr?size=250&text=otpauth%3A%2F%2Ftotp%2Falice%40google.com%3Fsecret%3DJBSWY3DPEHPK3PXP\n\nNow run the following and compare the output::\n\n    import pyotp\n    totp = pyotp.TOTP(\"JBSWY3DPEHPK3PXP\")\n    print(\"Current OTP:\", totp.now())\n\nThird-party contributions\n~~~~~~~~~~~~~~~~~~~~~~~~~\nThe following third-party contributions are not described by a standard, not officially supported, and provided for\nreference only:\n\n* ``pyotp.contrib.Steam()``: An implementation of Steam TOTP. Uses the same API as `pyotp.TOTP()`.\n\nLinks\n~~~~~\n\n* `Project home page (GitHub) <https://github.com/pyauth/pyotp>`_\n* `Documentation <https://pyauth.github.io/pyotp/>`_\n* `Package distribution (PyPI) <https://pypi.python.org/pypi/pyotp>`_\n* `Change log <https://github.com/pyauth/pyotp/blob/master/Changes.rst>`_\n* `RFC 4226: HOTP: An HMAC-Based One-Time Password <https://tools.ietf.org/html/rfc4226>`_\n* `RFC 6238: TOTP: Time-Based One-Time Password Algorithm <https://tools.ietf.org/html/rfc6238>`_\n* `ROTP <https://github.com/mdp/rotp>`_ - Original Ruby OTP library by `Mark Percival <https://github.com/mdp>`_\n* `OTPHP <https://github.com/lelag/otphp>`_ - PHP port of ROTP by `Le Lag <https://github.com/lelag>`_\n* `OWASP Authentication Cheat Sheet <https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Authentication_Cheat_Sheet.md>`_\n* `NIST SP 800-63-3: Digital Authentication Guideline <https://pages.nist.gov/800-63-3/>`_\n\nFor new applications:\n\n* `WebAuthn <https://www.w3.org/TR/webauthn/>`_\n* `PyWARP <https://github.com/pyauth/pywarp>`_\n\nVersioning\n~~~~~~~~~~\nThis package follows the `Semantic Versioning 2.0.0 <http://semver.org/>`_ standard. To control changes, it is\nrecommended that application developers pin the package version and manage it using `pip-tools\n<https://github.com/jazzband/pip-tools>`_ or similar. For library developers, pinning the major version is\nrecommended.\n\n.. image:: https://github.com/pyauth/pyotp/workflows/Python%20package/badge.svg\n        :target: https://github.com/pyauth/pyotp/actions\n.. image:: https://img.shields.io/codecov/c/github/pyauth/pyotp/master.svg\n        :target: https://codecov.io/github/pyauth/pyotp?branch=master\n.. image:: https://img.shields.io/pypi/v/pyotp.svg\n        :target: https://pypi.python.org/pypi/pyotp\n.. image:: https://img.shields.io/pypi/l/pyotp.svg\n        :target: https://pypi.python.org/pypi/pyotp\n.. image:: https://readthedocs.org/projects/pyotp/badge/?version=latest\n        :target: https://pyotp.readthedocs.io/\n","description_content_type":"text/x-rst","docs_url":null,"download_url":null,"downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"dynamic":null,"home_page":null,"keywords":null,"license":null,"license_expression":"MIT","license_files":["LICENSE"],"maintainer":"Andrey Kislyuk","maintainer_email":"kislyuk@gmail.com","name":"PyOTP","package_url":"https://pypi.org/project/PyOTP/","platform":null,"project_url":"https://pypi.org/project/PyOTP/","project_urls":{"Change Log":"https://github.com/pyauth/pyotp/blob/main/Changes.rst","Documentation":"https://github.com/pyauth/pyotp","Homepage":"https://github.com/pyauth/pyotp","Issue Tracker":"https://github.com/pyauth/pyotp/issues","Source Code":"https://github.com/pyauth/pyotp"},"provides_extra":["test"],"release_url":"https://pypi.org/project/PyOTP/2.10.0/","requires_dist":["coverage; extra == \"test\"","mypy; extra == \"test\"","ruff; extra == \"test\"","wheel; extra == \"test\""],"requires_python":">=3.8","summary":"Python One Time Password Library","version":"2.10.0","yanked":false,"yanked_reason":null},"last_serial":38017394,"ownership":{"organization":null,"roles":[{"role":"Owner","user":"kislyuk"},{"role":"Maintainer","user":"nathforge"}]},"releases":{"1.3.0":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"70191d96bbb4e9fd5f287bf5f601031d956b0acbdcd740f150de0eb3957ce611","md5":"73cd177722a6cba3868de900338115d0","sha256":"1a14f7278f808428ba5221cd93cef2b9f9da016bc720ed35e0b40b2113cf4fb2"},"downloads":-1,"filename":"pyotp-1.3.0.tar.gz","has_sig":false,"md5_digest":"73cd177722a6cba3868de900338115d0","packagetype":"sdist","python_version":"source","requires_python":null,"size":4131,"upload_time":"2011-09-26T12:27:11","upload_time_iso_8601":"2011-09-26T12:27:11.969258Z","url":"https://files.pythonhosted.org/packages/70/19/1d96bbb4e9fd5f287bf5f601031d956b0acbdcd740f150de0eb3957ce611/pyotp-1.3.0.tar.gz","yanked":false,"yanked_reason":null}],"1.3.1":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"ee378d76dcd996ac5e4a361de1e21c6c2d35ef10802f3143b447b5f7e0f992eb","md5":"7c45ca9a13f863caa1e8146e07d2b8b2","sha256":"86ea8fc7425f1dfeed3c3c4360c48780fa90cb505440a73b097f00cb13baea1b"},"downloads":-1,"filename":"pyotp-1.3.1.tar.gz","has_sig":false,"md5_digest":"7c45ca9a13f863caa1e8146e07d2b8b2","packagetype":"sdist","python_version":"source","requires_python":null,"size":4843,"upload_time":"2012-02-29T10:47:41","upload_time_iso_8601":"2012-02-29T10:47:41.238998Z","url":"https://files.pythonhosted.org/packages/ee/37/8d76dcd996ac5e4a361de1e21c6c2d35ef10802f3143b447b5f7e0f992eb/pyotp-1.3.1.tar.gz","yanked":false,"yanked_reason":null}],"1.4":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"29e64080a1320287b13449bf7793facfc9c55c76967581160d5c9eb090aa67ce","md5":"e54ba3b645b5b726cd2685ef59cc8d69","sha256":"90116099f4c0d7cd3fb9f230cfd4dbfa8f99f53c464796a43584f5d9ac83a5ee"},"downloads":-1,"filename":"pyotp-1.4.tar.gz","has_sig":false,"md5_digest":"e54ba3b645b5b726cd2685ef59cc8d69","packagetype":"sdist","python_version":"source","requires_python":null,"size":4885,"upload_time":"2014-03-05T18:49:37","upload_time_iso_8601":"2014-03-05T18:49:37.553900Z","url":"https://files.pythonhosted.org/packages/29/e6/4080a1320287b13449bf7793facfc9c55c76967581160d5c9eb090aa67ce/pyotp-1.4.tar.gz","yanked":false,"yanked_reason":null}],"1.4.1":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"6e2ff73658d41cf24da419a0c1ee8b67a516b301df7eed52d2fc7966904c3d28","md5":"d2b2c1e78785b079107dac7f52f003d4","sha256":"e08d5164ccbe1d031894b5a1bb2a8e930f2be1d7a96d2b374f16239422b6c666"},"downloads":-1,"filename":"pyotp-1.4.1.tar.gz","has_sig":false,"md5_digest":"d2b2c1e78785b079107dac7f52f003d4","packagetype":"sdist","python_version":"source","requires_python":null,"size":5386,"upload_time":"2014-03-27T15:49:02","upload_time_iso_8601":"2014-03-27T15:49:02.882575Z","url":"https://files.pythonhosted.org/packages/6e/2f/f73658d41cf24da419a0c1ee8b67a516b301df7eed52d2fc7966904c3d28/pyotp-1.4.1.tar.gz","yanked":false,"yanked_reason":null}],"1.4.2":[{"comment_text":"","core-metadata":{"sha256":"08183fc5d53efbc0f7ca192b448813d3fc670557bfe73e9585b29ccb9566ab16"},"digests":{"blake2b_256":"1fd9a191f96468a6955f162295d715d6c4443439a2d3a8a2cc310cce8e49bcf4","md5":"84ea5b1095954621e3ce98dece5b5479","sha256":"7866791f1f9ebf9d99416b16df8dcb9d0cbfe44df1f98e5da839fb2cb19271d8"},"downloads":-1,"filename":"pyotp-1.4.2-py2.py3-none-any.whl","has_sig":false,"md5_digest":"84ea5b1095954621e3ce98dece5b5479","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":9756,"upload_time":"2015-08-03T22:01:59","upload_time_iso_8601":"2015-08-03T22:01:59.383724Z","url":"https://files.pythonhosted.org/packages/1f/d9/a191f96468a6955f162295d715d6c4443439a2d3a8a2cc310cce8e49bcf4/pyotp-1.4.2-py2.py3-none-any.whl","yanked":false,"yanked_reason":null}],"2.0.0":[{"comment_text":"","core-metadata":{"sha256":"deaaa20c399ec97deab85497869a47e0bcae10fb94badff972a74b09cac89e7e"},"digests":{"blake2b_256":"d49b2fdb59640f047a007a5f9380a54cb75b4a5beddb0a2c29d18ee8ca7c3738","md5":"0d374e3c77dc414abaa1daddf5f2b352","sha256":"b8b5b3dbe11075d592f9542cb2f8ff340cef21c911c1560b1d02aea7ebc6f787"},"downloads":-1,"filename":"pyotp-2.0.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"0d374e3c77dc414abaa1daddf5f2b352","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":9775,"upload_time":"2015-08-22T23:09:15","upload_time_iso_8601":"2015-08-22T23:09:15.012136Z","url":"https://files.pythonhosted.org/packages/d4/9b/2fdb59640f047a007a5f9380a54cb75b4a5beddb0a2c29d18ee8ca7c3738/pyotp-2.0.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"19fb7ffc1cb9810e90b357adb6d7ce405931a9e35acc79c94143ec40764ac5a4","md5":"896bc7b44940bfdbd3d5e8180cef8d29","sha256":"4de46c41ace2f146f452933cdfaf6a1c1b81d6173c463264ac673b7098efc95e"},"downloads":-1,"filename":"pyotp-2.0.0.tar.gz","has_sig":false,"md5_digest":"896bc7b44940bfdbd3d5e8180cef8d29","packagetype":"sdist","python_version":"source","requires_python":null,"size":8116,"upload_time":"2015-08-22T23:09:06","upload_time_iso_8601":"2015-08-22T23:09:06.320531Z","url":"https://files.pythonhosted.org/packages/19/fb/7ffc1cb9810e90b357adb6d7ce405931a9e35acc79c94143ec40764ac5a4/pyotp-2.0.0.tar.gz","yanked":false,"yanked_reason":null}],"2.0.1":[{"comment_text":"","core-metadata":{"sha256":"1025cc951e525895d31607e0f3bfbd037763d7f181fe16287c5a9a010a4c89d2"},"digests":{"blake2b_256":"c64cf98b873f120fe36ab9da5ae6efdaf27c1c5c665dc0ef3aa3aec260b71149","md5":"c883a472ccbd4aad0a4d075e0e1da2b8","sha256":"6311d8698bc6eeb97e8abdf971498e7e2656f04529defb337d8bd7abcc045026"},"downloads":-1,"filename":"pyotp-2.0.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"c883a472ccbd4aad0a4d075e0e1da2b8","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":9799,"upload_time":"2015-09-28T14:44:05","upload_time_iso_8601":"2015-09-28T14:44:05.129521Z","url":"https://files.pythonhosted.org/packages/c6/4c/f98b873f120fe36ab9da5ae6efdaf27c1c5c665dc0ef3aa3aec260b71149/pyotp-2.0.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"8eb754e58aa5f73ff624b67c33be97cf13fc13f1b55d7b137757498051f8cc9c","md5":"76811d7f9a6f85cd940f41cab737eea9","sha256":"d08ebc8a1083aff63a62dc702df26c460b5d2ee4badce6e6c7566e5390078667"},"downloads":-1,"filename":"pyotp-2.0.1.tar.gz","has_sig":false,"md5_digest":"76811d7f9a6f85cd940f41cab737eea9","packagetype":"sdist","python_version":"source","requires_python":null,"size":8118,"upload_time":"2015-09-28T14:43:56","upload_time_iso_8601":"2015-09-28T14:43:56.924679Z","url":"https://files.pythonhosted.org/packages/8e/b7/54e58aa5f73ff624b67c33be97cf13fc13f1b55d7b137757498051f8cc9c/pyotp-2.0.1.tar.gz","yanked":false,"yanked_reason":null}],"2.1.0":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"8c7b840804b1577d2f49c2d0c7163abdce38885137ae8305049e999be905e0cb","md5":"e75c7da1f5e92b5b3f2d86a956ec74ad","sha256":"6fe69c89bda0eefe3ff152235b41ff6442b0a15007ea17ed6184148612d2b72f"},"downloads":-1,"filename":"pyotp-2.1.0.tar.gz","has_sig":false,"md5_digest":"e75c7da1f5e92b5b3f2d86a956ec74ad","packagetype":"sdist","python_version":"source","requires_python":null,"size":9119,"upload_time":"2016-05-02T16:00:30","upload_time_iso_8601":"2016-05-02T16:00:30.631048Z","url":"https://files.pythonhosted.org/packages/8c/7b/840804b1577d2f49c2d0c7163abdce38885137ae8305049e999be905e0cb/pyotp-2.1.0.tar.gz","yanked":false,"yanked_reason":null}],"2.1.1":[{"comment_text":"","core-metadata":{"sha256":"c937d2b4f60bb749448bed3383cafd7829974f9114c8aa51b4062db4d416b650"},"digests":{"blake2b_256":"86e106036f4db1c7632d667838b9664abdb79d1bf26e10c7b99b0400766e6cd2","md5":"648bceefdfa1b44a31adb6e1dc3ca7d6","sha256":"7d090c0efeae6c71e60c8b798554c12eb7735c881e6ae4e75abe3ec8d2fea36a"},"downloads":-1,"filename":"pyotp-2.1.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"648bceefdfa1b44a31adb6e1dc3ca7d6","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":10117,"upload_time":"2016-05-02T16:02:35","upload_time_iso_8601":"2016-05-02T16:02:35.659971Z","url":"https://files.pythonhosted.org/packages/86/e1/06036f4db1c7632d667838b9664abdb79d1bf26e10c7b99b0400766e6cd2/pyotp-2.1.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"febce0fc7483dfdba301c24846278e02e60dae7c462d33c1d0aebf3ba4ea8db6","md5":"5d5a60235d6a170accaecdfc945ae7ff","sha256":"fef428ebb0c02bbf108895b8362ef5f52ec9cc14b3964a501258cfc8ddfb1590"},"downloads":-1,"filename":"pyotp-2.1.1.tar.gz","has_sig":false,"md5_digest":"5d5a60235d6a170accaecdfc945ae7ff","packagetype":"sdist","python_version":"source","requires_python":null,"size":9120,"upload_time":"2016-05-02T16:02:13","upload_time_iso_8601":"2016-05-02T16:02:13.236909Z","url":"https://files.pythonhosted.org/packages/fe/bc/e0fc7483dfdba301c24846278e02e60dae7c462d33c1d0aebf3ba4ea8db6/pyotp-2.1.1.tar.gz","yanked":false,"yanked_reason":null}],"2.10.0":[{"comment_text":null,"core-metadata":{"sha256":"921222968b5c7aba480db1e9288544cf63407032fade2e195310b19c80659261"},"digests":{"blake2b_256":"65337b83bde70eddaaaaef487751a9c3a5cc0c0be54620ded0e120ebdc401ff9","md5":"78721543fdf0c105252429b65c97b64a","sha256":"1df2f6a1bcc3bb0716172a5215ddc2f8c7c7fd26a13df9927d52e1746934836c"},"downloads":-1,"filename":"pyotp-2.10.0-py3-none-any.whl","has_sig":false,"md5_digest":"78721543fdf0c105252429b65c97b64a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":13768,"upload_time":"2026-06-14T03:48:47","upload_time_iso_8601":"2026-06-14T03:48:47.831779Z","url":"https://files.pythonhosted.org/packages/65/33/7b83bde70eddaaaaef487751a9c3a5cc0c0be54620ded0e120ebdc401ff9/pyotp-2.10.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"2dc6c5d96a86fd0bf6fa1bbb5c5c341ff3208638b692727a683c8289068d9a11","md5":"18c094a2f2ca466f8219d1bb0494dcb1","sha256":"d01e9703443616b03c57c700b5cbffd56a1f929c1b0f8f03131bc78c1fca9d3f"},"downloads":-1,"filename":"pyotp-2.10.0.tar.gz","has_sig":false,"md5_digest":"18c094a2f2ca466f8219d1bb0494dcb1","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":18625,"upload_time":"2026-06-14T03:48:49","upload_time_iso_8601":"2026-06-14T03:48:49.221961Z","url":"https://files.pythonhosted.org/packages/2d/c6/c5d96a86fd0bf6fa1bbb5c5c341ff3208638b692727a683c8289068d9a11/pyotp-2.10.0.tar.gz","yanked":false,"yanked_reason":null}],"2.2.1":[{"comment_text":"","core-metadata":{"sha256":"26a87245ba2c5038e3d0a8f8a0a58878e0db5d072993bc60fb761e70902eb1ae"},"digests":{"blake2b_256":"6a7bbba40f384a598ace1054d9ab998809108478d2943e203dd1d5fee5dc464a","md5":"d092726286c8d85268e179b60a0110d3","sha256":"dbde454402f78c5955b1b02e9180f980fe31b1e8ae2077c613f15a2e8f563110"},"downloads":-1,"filename":"pyotp-2.2.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"d092726286c8d85268e179b60a0110d3","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":10601,"upload_time":"2016-08-30T17:26:54","upload_time_iso_8601":"2016-08-30T17:26:54.390384Z","url":"https://files.pythonhosted.org/packages/6a/7b/bba40f384a598ace1054d9ab998809108478d2943e203dd1d5fee5dc464a/pyotp-2.2.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"9bab26991667e28962451d22cb96c8b17c7f3bb0b3b5ba24b9994f78db30a342","md5":"7c9d3c0a19d2ced48b10f0c1fd8f0bb2","sha256":"13877ba4878597ea701626be112811062e30e8fc90a1314b14a79c21f0c67f0a"},"downloads":-1,"filename":"pyotp-2.2.1.tar.gz","has_sig":false,"md5_digest":"7c9d3c0a19d2ced48b10f0c1fd8f0bb2","packagetype":"sdist","python_version":"source","requires_python":null,"size":9867,"upload_time":"2016-08-30T17:26:49","upload_time_iso_8601":"2016-08-30T17:26:49.361339Z","url":"https://files.pythonhosted.org/packages/9b/ab/26991667e28962451d22cb96c8b17c7f3bb0b3b5ba24b9994f78db30a342/pyotp-2.2.1.tar.gz","yanked":false,"yanked_reason":null}],"2.2.4":[{"comment_text":"","core-metadata":{"sha256":"4be1ddcc6aa100d920941ec870a379118764d45bb5d9b185ef18c133136cae03"},"digests":{"blake2b_256":"609da3b1294f3ffbb290565b3d28589b4a7cb7aecb2ba018eebdde3597bd7e13","md5":"eff6d4688240d6405219e984754307a7","sha256":"4dfa4e8f9ac9061214b85674cff14cbf8e0efd6ccf4b83789658e551b1a5ff6b"},"downloads":-1,"filename":"pyotp-2.2.4-py2.py3-none-any.whl","has_sig":false,"md5_digest":"eff6d4688240d6405219e984754307a7","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":10889,"upload_time":"2017-01-04T19:16:15","upload_time_iso_8601":"2017-01-04T19:16:15.325793Z","url":"https://files.pythonhosted.org/packages/60/9d/a3b1294f3ffbb290565b3d28589b4a7cb7aecb2ba018eebdde3597bd7e13/pyotp-2.2.4-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"ac0cbd96508e36956ae627e527a7a7fba486865a738b4682e7290cd0e7c34f52","md5":"16cb1a08d38777ca74b5e9c7803810b6","sha256":"92c3973ba91273e7e4a7fd4a1020ae4b050ccd2e149b554911e1b45ca458ac2d"},"downloads":-1,"filename":"pyotp-2.2.4.tar.gz","has_sig":false,"md5_digest":"16cb1a08d38777ca74b5e9c7803810b6","packagetype":"sdist","python_version":"source","requires_python":null,"size":10150,"upload_time":"2017-01-04T19:16:09","upload_time_iso_8601":"2017-01-04T19:16:09.034472Z","url":"https://files.pythonhosted.org/packages/ac/0c/bd96508e36956ae627e527a7a7fba486865a738b4682e7290cd0e7c34f52/pyotp-2.2.4.tar.gz","yanked":false,"yanked_reason":null}],"2.2.5":[{"comment_text":"","core-metadata":{"sha256":"b9595ea7f584a9675818b4c0a39dbc1fb64923e5ca0a04cd08cd721ccb61ddca"},"digests":{"blake2b_256":"725358de31b0321b3da5c6647bf2456b3bf29364fc4d4dc02c4bd9010d6db097","md5":"569be7232404b404764417d059aed9ca","sha256":"ba4506d028be8617122681ca828676da929871cc2881a0aedf3149f834f68293"},"downloads":-1,"filename":"pyotp-2.2.5-py2.py3-none-any.whl","has_sig":false,"md5_digest":"569be7232404b404764417d059aed9ca","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":11508,"upload_time":"2017-06-03T18:51:51","upload_time_iso_8601":"2017-06-03T18:51:51.631054Z","url":"https://files.pythonhosted.org/packages/72/53/58de31b0321b3da5c6647bf2456b3bf29364fc4d4dc02c4bd9010d6db097/pyotp-2.2.5-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"2a52cac703de65687387f18b0b32548a7fb803ffab5e66b79b3b8f0b942eaa7b","md5":"276cabc14342a5364d4d80a609a1f49e","sha256":"e23e3e1e9ba75429ee6a17cb6b41aadd09658158aa1f66017d3b00413293fd33"},"downloads":-1,"filename":"pyotp-2.2.5.tar.gz","has_sig":false,"md5_digest":"276cabc14342a5364d4d80a609a1f49e","packagetype":"sdist","python_version":"source","requires_python":null,"size":10608,"upload_time":"2017-06-03T18:51:48","upload_time_iso_8601":"2017-06-03T18:51:48.954685Z","url":"https://files.pythonhosted.org/packages/2a/52/cac703de65687387f18b0b32548a7fb803ffab5e66b79b3b8f0b942eaa7b/pyotp-2.2.5.tar.gz","yanked":false,"yanked_reason":null}],"2.2.6":[{"comment_text":"","core-metadata":{"sha256":"9ed6ea230da5387f3e24597af09e458f687a1a35233c6d9a63458d071d052cd9"},"digests":{"blake2b_256":"121f0b27e24456a9bb89b418602f61cbcad4861b55cf872469643ed13b38ff9b","md5":"63603ec054c4e794eae17d34ee5bd8c3","sha256":"8f0df1fcf9e86cec41f0a31c91212b1a04fca6dd353426917222b21864b9310b"},"downloads":-1,"filename":"pyotp-2.2.6-py2.py3-none-any.whl","has_sig":false,"md5_digest":"63603ec054c4e794eae17d34ee5bd8c3","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":11481,"upload_time":"2017-06-10T16:14:05","upload_time_iso_8601":"2017-06-10T16:14:05.942104Z","url":"https://files.pythonhosted.org/packages/12/1f/0b27e24456a9bb89b418602f61cbcad4861b55cf872469643ed13b38ff9b/pyotp-2.2.6-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"6769131f5ad63de40c30f3be88d891e4a2ea1b69398528db99bc1e5c543422fa","md5":"125ae00de613905bb8d3b4c12bd1e71d","sha256":"dd9130dd91a0340d89a0f06f887dbd76dd07fb95a8886dc4bc401239f2eebd69"},"downloads":-1,"filename":"pyotp-2.2.6.tar.gz","has_sig":false,"md5_digest":"125ae00de613905bb8d3b4c12bd1e71d","packagetype":"sdist","python_version":"source","requires_python":null,"size":10602,"upload_time":"2017-06-10T16:14:02","upload_time_iso_8601":"2017-06-10T16:14:02.822215Z","url":"https://files.pythonhosted.org/packages/67/69/131f5ad63de40c30f3be88d891e4a2ea1b69398528db99bc1e5c543422fa/pyotp-2.2.6.tar.gz","yanked":false,"yanked_reason":null}],"2.2.7":[{"comment_text":"","core-metadata":{"sha256":"385a4d8daa37f39420e402e5c3ccf9c05e28a0713c017d200be326d00d8d03c8"},"digests":{"blake2b_256":"8d3b523e8fbe65fc71294b98d84832577cdb4610b2aaee9ddbd8ee571a562895","md5":"703fa72acc377829fcc8b412b8b153b3","sha256":"1e3dc3d16919c4efac528d1dbecc17de1a97c4ecfdacb89d7726ed2c6645adff"},"downloads":-1,"filename":"pyotp-2.2.7-py2.py3-none-any.whl","has_sig":false,"md5_digest":"703fa72acc377829fcc8b412b8b153b3","packagetype":"bdist_wheel","python_version":"2.7","requires_python":null,"size":9200,"upload_time":"2018-11-06T00:23:51","upload_time_iso_8601":"2018-11-06T00:23:51.445718Z","url":"https://files.pythonhosted.org/packages/8d/3b/523e8fbe65fc71294b98d84832577cdb4610b2aaee9ddbd8ee571a562895/pyotp-2.2.7-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"b1ab477cda97b6ca7baced5106471cb1ac1fe698d1b035983b9f8ee3422989eb","md5":"7d3f89d8c4805e0facf6ebb6f9cebd29","sha256":"be0ffeabddaa5ee53e7204e7740da842d070cf69168247a3d0c08541b84de602"},"downloads":-1,"filename":"pyotp-2.2.7.tar.gz","has_sig":false,"md5_digest":"7d3f89d8c4805e0facf6ebb6f9cebd29","packagetype":"sdist","python_version":"source","requires_python":null,"size":11416,"upload_time":"2018-11-06T00:23:49","upload_time_iso_8601":"2018-11-06T00:23:49.571019Z","url":"https://files.pythonhosted.org/packages/b1/ab/477cda97b6ca7baced5106471cb1ac1fe698d1b035983b9f8ee3422989eb/pyotp-2.2.7.tar.gz","yanked":false,"yanked_reason":null}],"2.2.8":[{"comment_text":"","core-metadata":{"sha256":"38754c9e6a92846dc16e61493c6f42e9b8b9d3376f2d9dbb5c91ebfcd3aad78f"},"digests":{"blake2b_256":"c4edacfa383d30e6d0a0bb7e296b45df1fbe4fffd3e10f151db188d02c9d3a7d","md5":"e1ad8f6b23e6780a9eab8a868e89278e","sha256":"0bbc171277f171b6fe02483dfe2e10334af0403fe8728c1098cfbafac06b499f"},"downloads":-1,"filename":"pyotp-2.2.8-py2.py3-none-any.whl","has_sig":false,"md5_digest":"e1ad8f6b23e6780a9eab8a868e89278e","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":10255,"upload_time":"2019-07-26T16:54:37","upload_time_iso_8601":"2019-07-26T16:54:37.298966Z","url":"https://files.pythonhosted.org/packages/c4/ed/acfa383d30e6d0a0bb7e296b45df1fbe4fffd3e10f151db188d02c9d3a7d/pyotp-2.2.8-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"bb9db37d86c510f8c107ebe51353aa139e2c993b6df3fb46cc8e0b60fad53962","md5":"b9dcf69d4af51f471336e3aff1de7639","sha256":"dbc87f2727b006b31c80728a0e703b62e977f33f024fce9b62a371d5bea61625"},"downloads":-1,"filename":"pyotp-2.2.8.tar.gz","has_sig":false,"md5_digest":"b9dcf69d4af51f471336e3aff1de7639","packagetype":"sdist","python_version":"source","requires_python":null,"size":11676,"upload_time":"2019-07-26T16:54:39","upload_time_iso_8601":"2019-07-26T16:54:39.078777Z","url":"https://files.pythonhosted.org/packages/bb/9d/b37d86c510f8c107ebe51353aa139e2c993b6df3fb46cc8e0b60fad53962/pyotp-2.2.8.tar.gz","yanked":false,"yanked_reason":null}],"2.3.0":[{"comment_text":"","core-metadata":{"sha256":"65ae94f1e0c30e31846b7b5ffb412a158b38af882f88b978873575c6f1fa670a"},"digests":{"blake2b_256":"27644fd5eb23f4ba502049cdc74de219a69d06c89d4282a2fec5ad1e83a6bee4","md5":"4206e38d484020d5e092255002825b79","sha256":"c88f37fd47541a580b744b42136f387cdad481b560ef410c0d85c957eb2a2bc0"},"downloads":-1,"filename":"pyotp-2.3.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"4206e38d484020d5e092255002825b79","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":10261,"upload_time":"2019-07-26T17:00:13","upload_time_iso_8601":"2019-07-26T17:00:13.766265Z","url":"https://files.pythonhosted.org/packages/27/64/4fd5eb23f4ba502049cdc74de219a69d06c89d4282a2fec5ad1e83a6bee4/pyotp-2.3.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"f715395c4945ea6bc37e8811280bb675615cb4c2b2c1cd70bdc43329da91a386","md5":"d445da203b0e60b5b386d07fdb431e14","sha256":"fc537e8acd985c5cbf51e11b7d53c42276fee017a73aec7c07380695671ca1a1"},"downloads":-1,"filename":"pyotp-2.3.0.tar.gz","has_sig":false,"md5_digest":"d445da203b0e60b5b386d07fdb431e14","packagetype":"sdist","python_version":"source","requires_python":null,"size":11672,"upload_time":"2019-07-26T17:00:15","upload_time_iso_8601":"2019-07-26T17:00:15.818426Z","url":"https://files.pythonhosted.org/packages/f7/15/395c4945ea6bc37e8811280bb675615cb4c2b2c1cd70bdc43329da91a386/pyotp-2.3.0.tar.gz","yanked":false,"yanked_reason":null}],"2.4.0":[{"comment_text":"","core-metadata":{"sha256":"0d1267a8095f8fbb53e7cc15e028bcc1c53d9b03ba5eb2482e07f54a0e2df9d8"},"digests":{"blake2b_256":"3d2f9bc720582b37d648f949fd190be6e50d6530c5223709462d7b7fab7c0c2c","md5":"889e085977a6717c849450decc685116","sha256":"e96c2d725d0b613b793775bb184e90297fda5f4989e210e28acf08a09ac2cc83"},"downloads":-1,"filename":"pyotp-2.4.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"889e085977a6717c849450decc685116","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":11246,"upload_time":"2020-07-29T20:06:58","upload_time_iso_8601":"2020-07-29T20:06:58.811645Z","url":"https://files.pythonhosted.org/packages/3d/2f/9bc720582b37d648f949fd190be6e50d6530c5223709462d7b7fab7c0c2c/pyotp-2.4.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"9b1b179c53123bd712b6073e928546b7d7c480e2504955ede53b4a8bef24f31c","md5":"b5f3f1b045bda00acaddeb665ed2c96b","sha256":"01eceab573181188fe038d001e42777884a7f5367203080ef5bda0e30fe82d28"},"downloads":-1,"filename":"pyotp-2.4.0.tar.gz","has_sig":false,"md5_digest":"b5f3f1b045bda00acaddeb665ed2c96b","packagetype":"sdist","python_version":"source","requires_python":null,"size":14789,"upload_time":"2020-07-29T20:07:00","upload_time_iso_8601":"2020-07-29T20:07:00.082781Z","url":"https://files.pythonhosted.org/packages/9b/1b/179c53123bd712b6073e928546b7d7c480e2504955ede53b4a8bef24f31c/pyotp-2.4.0.tar.gz","yanked":false,"yanked_reason":null}],"2.4.1":[{"comment_text":"","core-metadata":{"sha256":"86e9297dcb18639a2dadd03cd035c68535dad6f435f1b2810a36c27bbd276a48"},"digests":{"blake2b_256":"6f5fb8b985153df5516386e2918ab97ac836abfe88dc420cd3211d7b9e30814e","md5":"782a29249048ed34faae7732730b397a","sha256":"ef07c393660529261e66902e788b32e46260d2c29eb740978df778260a1c2b4c"},"downloads":-1,"filename":"pyotp-2.4.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"782a29249048ed34faae7732730b397a","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":11354,"upload_time":"2020-10-16T22:54:33","upload_time_iso_8601":"2020-10-16T22:54:33.125828Z","url":"https://files.pythonhosted.org/packages/6f/5f/b8b985153df5516386e2918ab97ac836abfe88dc420cd3211d7b9e30814e/pyotp-2.4.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"4fb421f8c6b0b941f8bea4587088a40d8a207851b19cb07ca8fa0a1e38e27082","md5":"e8967efbff11497e3700ccfc150496ad","sha256":"038a3f70b34eaad3f72459e8b411662ef8dfcdd95f7d9203fa489e987a75584b"},"downloads":-1,"filename":"pyotp-2.4.1.tar.gz","has_sig":false,"md5_digest":"e8967efbff11497e3700ccfc150496ad","packagetype":"sdist","python_version":"source","requires_python":null,"size":15232,"upload_time":"2020-10-16T22:54:34","upload_time_iso_8601":"2020-10-16T22:54:34.648481Z","url":"https://files.pythonhosted.org/packages/4f/b4/21f8c6b0b941f8bea4587088a40d8a207851b19cb07ca8fa0a1e38e27082/pyotp-2.4.1.tar.gz","yanked":false,"yanked_reason":null}],"2.5.0":[{"comment_text":"","core-metadata":{"sha256":"1906ea30ebdb103694a54ad6eb82124a6ef070bb4604fabc08ace638b669834c"},"digests":{"blake2b_256":"8e0d5c2585f200a76a301d78597f4dab77e2e56c596363b43d3e517f462857e0","md5":"6849bf740a73bf151f3c2a06107a3bd7","sha256":"7152cab12d1731648d0e19f427dfd9371f4f6efb32605b9355d19d56845d66f8"},"downloads":-1,"filename":"pyotp-2.5.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"6849bf740a73bf151f3c2a06107a3bd7","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":11660,"upload_time":"2021-01-29T23:13:56","upload_time_iso_8601":"2021-01-29T23:13:56.838888Z","url":"https://files.pythonhosted.org/packages/8e/0d/5c2585f200a76a301d78597f4dab77e2e56c596363b43d3e517f462857e0/pyotp-2.5.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"0d0f5c19fed3022bf7040a63822387cb94baa32a020e38e93716de0c56f22083","md5":"80c0f73e4d55b373226e51db245dce89","sha256":"2fee71d834daf6129b9bb04515587dd069966d63e2703b3238a1a7c2970e6d41"},"downloads":-1,"filename":"pyotp-2.5.0.tar.gz","has_sig":false,"md5_digest":"80c0f73e4d55b373226e51db245dce89","packagetype":"sdist","python_version":"source","requires_python":null,"size":15492,"upload_time":"2021-01-29T23:13:58","upload_time_iso_8601":"2021-01-29T23:13:58.310616Z","url":"https://files.pythonhosted.org/packages/0d/0f/5c19fed3022bf7040a63822387cb94baa32a020e38e93716de0c56f22083/pyotp-2.5.0.tar.gz","yanked":false,"yanked_reason":null}],"2.5.1":[{"comment_text":"","core-metadata":{"sha256":"795ce5b9201ce4941199438c8272cd221e426293011a88edb96415353e3e8294"},"digests":{"blake2b_256":"96a2bb8d968ef3b483b241b3fa765e48a7640e69b88424e46d0bfde6be723915","md5":"7a0c0872fc806b5b795196c14164444b","sha256":"3540a2b4bbd0c13f691aa789d2605b2d0095608e87b016bb31d50afd9849f827"},"downloads":-1,"filename":"pyotp-2.5.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"7a0c0872fc806b5b795196c14164444b","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":11666,"upload_time":"2021-01-30T00:25:44","upload_time_iso_8601":"2021-01-30T00:25:44.797056Z","url":"https://files.pythonhosted.org/packages/96/a2/bb8d968ef3b483b241b3fa765e48a7640e69b88424e46d0bfde6be723915/pyotp-2.5.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"79db3c138862af03d223d0893f0075a61f56de2e469a8c598c07cf5dd1b98170","md5":"c9b836957e04bb2c2c3a61bd9e14c4e8","sha256":"2a54d393aff3a244b566d78d597c9cb42e91b3b12f3169cec89d9dfff1c9c5bc"},"downloads":-1,"filename":"pyotp-2.5.1.tar.gz","has_sig":false,"md5_digest":"c9b836957e04bb2c2c3a61bd9e14c4e8","packagetype":"sdist","python_version":"source","requires_python":null,"size":15503,"upload_time":"2021-01-30T00:25:46","upload_time_iso_8601":"2021-01-30T00:25:46.503493Z","url":"https://files.pythonhosted.org/packages/79/db/3c138862af03d223d0893f0075a61f56de2e469a8c598c07cf5dd1b98170/pyotp-2.5.1.tar.gz","yanked":false,"yanked_reason":null}],"2.6.0":[{"comment_text":"","core-metadata":{"sha256":"6dae7dfa570ee2078e4a084f5e9904da7ea839d3582d2ddc639f8e38a04e15e6"},"digests":{"blake2b_256":"a5cd9114b5116a9bfbf7133e79f2f12c31a8611a689849a1a990fe5586c08526","md5":"f742a0a91e99515501b4354b82595e5a","sha256":"9d144de0f8a601d6869abe1409f4a3f75f097c37b50a36a3bf165810a6e23f28"},"downloads":-1,"filename":"pyotp-2.6.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"f742a0a91e99515501b4354b82595e5a","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":11801,"upload_time":"2021-02-04T19:47:49","upload_time_iso_8601":"2021-02-04T19:47:49.050264Z","url":"https://files.pythonhosted.org/packages/a5/cd/9114b5116a9bfbf7133e79f2f12c31a8611a689849a1a990fe5586c08526/pyotp-2.6.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"61cc3f440f8ec7611e1252826d304f4807b25d1814c606037af31b8af50dcd80","md5":"d440d7a30bbcd98c3c0cb17b4e5d4536","sha256":"d28ddfd40e0c1b6a6b9da961c7d47a10261fb58f378cb00f05ce88b26df9c432"},"downloads":-1,"filename":"pyotp-2.6.0.tar.gz","has_sig":false,"md5_digest":"d440d7a30bbcd98c3c0cb17b4e5d4536","packagetype":"sdist","python_version":"source","requires_python":null,"size":15687,"upload_time":"2021-02-04T19:47:50","upload_time_iso_8601":"2021-02-04T19:47:50.417163Z","url":"https://files.pythonhosted.org/packages/61/cc/3f440f8ec7611e1252826d304f4807b25d1814c606037af31b8af50dcd80/pyotp-2.6.0.tar.gz","yanked":false,"yanked_reason":null}],"2.7.0":[{"comment_text":"","core-metadata":{"sha256":"233c1ada03a02309e495555b0650b25a81f4f5a78079cad7c3f8867aee462319"},"digests":{"blake2b_256":"7c280f64e233694a065f5daca3790b5086e3d2f2e509e3f17c7894a40232349c","md5":"bf1fb183731f999195135b2f89e85fc8","sha256":"2e746de4f15685878df6d022c5691627af9941eec18e0d513f05497f5fa7711f"},"downloads":-1,"filename":"pyotp-2.7.0-py3-none-any.whl","has_sig":false,"md5_digest":"bf1fb183731f999195135b2f89e85fc8","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.6","size":12851,"upload_time":"2022-09-11T19:38:06","upload_time_iso_8601":"2022-09-11T19:38:06.497005Z","url":"https://files.pythonhosted.org/packages/7c/28/0f64e233694a065f5daca3790b5086e3d2f2e509e3f17c7894a40232349c/pyotp-2.7.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"8b68b1c800e187240d9ff420317376ea3feda5962544e7644003626519b70779","md5":"57660a7443658f078315e3351be75195","sha256":"ce989faba0df77dc032b45e51c6cca42bcf20896c8d3d1e7cd759a53dc7d6cb5"},"downloads":-1,"filename":"pyotp-2.7.0.tar.gz","has_sig":false,"md5_digest":"57660a7443658f078315e3351be75195","packagetype":"sdist","python_version":"source","requires_python":">=3.6","size":16709,"upload_time":"2022-09-11T19:38:08","upload_time_iso_8601":"2022-09-11T19:38:08.694157Z","url":"https://files.pythonhosted.org/packages/8b/68/b1c800e187240d9ff420317376ea3feda5962544e7644003626519b70779/pyotp-2.7.0.tar.gz","yanked":false,"yanked_reason":null}],"2.8.0":[{"comment_text":"","core-metadata":{"sha256":"7151dfe8b1728ac5774922c3297706a4ff5f09262722f60063c765fee4dd2ccb"},"digests":{"blake2b_256":"699090c2b94fb8951ea3dce39dc43fdc62b328f6f665e6684b5149488e13d99b","md5":"11bc652a3b224be139ceac850de0da03","sha256":"889d037fdde6accad28531fc62a790f089e5dfd5b638773e9ee004cce074a2e5"},"downloads":-1,"filename":"pyotp-2.8.0-py3-none-any.whl","has_sig":false,"md5_digest":"11bc652a3b224be139ceac850de0da03","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":12931,"upload_time":"2022-12-14T03:54:31","upload_time_iso_8601":"2022-12-14T03:54:31.537172Z","url":"https://files.pythonhosted.org/packages/69/90/90c2b94fb8951ea3dce39dc43fdc62b328f6f665e6684b5149488e13d99b/pyotp-2.8.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"7ef94c2ec78572a2d25f669220b8b9700c1133905ff6af9bf93c010778e82c65","md5":"b01f8bd1a326fe9a61581eb0b26a48b9","sha256":"c2f5e17d9da92d8ec1f7de6331ab08116b9115adbabcba6e208d46fc49a98c5a"},"downloads":-1,"filename":"pyotp-2.8.0.tar.gz","has_sig":false,"md5_digest":"b01f8bd1a326fe9a61581eb0b26a48b9","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":16873,"upload_time":"2022-12-14T03:54:33","upload_time_iso_8601":"2022-12-14T03:54:33.090229Z","url":"https://files.pythonhosted.org/packages/7e/f9/4c2ec78572a2d25f669220b8b9700c1133905ff6af9bf93c010778e82c65/pyotp-2.8.0.tar.gz","yanked":false,"yanked_reason":null}],"2.9.0":[{"comment_text":"","core-metadata":{"sha256":"b73301dc7327ccdd37c18c671142a572e9e8bf76dd51a98f7d1852b65b3d2a04"},"digests":{"blake2b_256":"c3c0c33c8792c3e50193ef55adb95c1c3c2786fe281123291c2dbf0eaab95a6f","md5":"037e4e5fbca83b4362db0f85076795ec","sha256":"81c2e5865b8ac55e825b0358e496e1d9387c811e85bb40e71a3b29b288963612"},"downloads":-1,"filename":"pyotp-2.9.0-py3-none-any.whl","has_sig":false,"md5_digest":"037e4e5fbca83b4362db0f85076795ec","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":13376,"upload_time":"2023-07-27T23:41:01","upload_time_iso_8601":"2023-07-27T23:41:01.685014Z","url":"https://files.pythonhosted.org/packages/c3/c0/c33c8792c3e50193ef55adb95c1c3c2786fe281123291c2dbf0eaab95a6f/pyotp-2.9.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"f3b21d5994ba2acde054a443bd5e2d384175449c7d2b6d1a0614dbca3a63abfc","md5":"7b8838bc0553f4dd8ef6228c79f501de","sha256":"346b6642e0dbdde3b4ff5a930b664ca82abfa116356ed48cc42c7d6590d36f63"},"downloads":-1,"filename":"pyotp-2.9.0.tar.gz","has_sig":false,"md5_digest":"7b8838bc0553f4dd8ef6228c79f501de","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":17763,"upload_time":"2023-07-27T23:41:03","upload_time_iso_8601":"2023-07-27T23:41:03.295037Z","url":"https://files.pythonhosted.org/packages/f3/b2/1d5994ba2acde054a443bd5e2d384175449c7d2b6d1a0614dbca3a63abfc/pyotp-2.9.0.tar.gz","yanked":false,"yanked_reason":null}]},"urls":[{"comment_text":null,"core-metadata":{"sha256":"921222968b5c7aba480db1e9288544cf63407032fade2e195310b19c80659261"},"digests":{"blake2b_256":"65337b83bde70eddaaaaef487751a9c3a5cc0c0be54620ded0e120ebdc401ff9","md5":"78721543fdf0c105252429b65c97b64a","sha256":"1df2f6a1bcc3bb0716172a5215ddc2f8c7c7fd26a13df9927d52e1746934836c"},"downloads":-1,"filename":"pyotp-2.10.0-py3-none-any.whl","has_sig":false,"md5_digest":"78721543fdf0c105252429b65c97b64a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":13768,"upload_time":"2026-06-14T03:48:47","upload_time_iso_8601":"2026-06-14T03:48:47.831779Z","url":"https://files.pythonhosted.org/packages/65/33/7b83bde70eddaaaaef487751a9c3a5cc0c0be54620ded0e120ebdc401ff9/pyotp-2.10.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"2dc6c5d96a86fd0bf6fa1bbb5c5c341ff3208638b692727a683c8289068d9a11","md5":"18c094a2f2ca466f8219d1bb0494dcb1","sha256":"d01e9703443616b03c57c700b5cbffd56a1f929c1b0f8f03131bc78c1fca9d3f"},"downloads":-1,"filename":"pyotp-2.10.0.tar.gz","has_sig":false,"md5_digest":"18c094a2f2ca466f8219d1bb0494dcb1","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":18625,"upload_time":"2026-06-14T03:48:49","upload_time_iso_8601":"2026-06-14T03:48:49.221961Z","url":"https://files.pythonhosted.org/packages/2d/c6/c5d96a86fd0bf6fa1bbb5c5c341ff3208638b692727a683c8289068d9a11/pyotp-2.10.0.tar.gz","yanked":false,"yanked_reason":null}],"vulnerabilities":[]}
