Skip to main content

A Python CLI tool to validate OTP codes

Project description

OTP CLI Utils

A command-line utility for working with TOTP (Time-based One-Time Password) codes. This tool helps you generate, validate, and manage OTP secrets with ease.

Features

  • 🔑 Generate current TOTP codes from a secret
  • ✅ Validate OTP codes against a secret
  • 🔄 Generate secure random OTP secrets
  • 📱 Create Google Authenticator compatible QR codes
  • 🛠️ Simple and intuitive command-line interface

Installation

Install the package using pip:

pip install otp-cli-utils

Usage

Get Current OTP Code

Get the current OTP code for a given secret:

otp-cli-utils get-otp <secret>

Example:

otp-cli-utils get-otp ABCDEF1234567890

Validate an OTP

Validate if an OTP code matches the expected value for a given secret:

otp-cli-utils validate <secret> <otp> [--window-count <count>] [--time-period <seconds>]

Options:

  • --window-count, -w: Tokens in the previous 30s time windows that should be considered valid (default: 0)
  • --time-period, -t: OTP valid time period in seconds (default: 30)

Example:

  • Without window count or time period option
otp-cli-utils validate ABCDEF1234567890 123456
  • With window count option
otp-cli-utils validate ABCDEF1234567890 123456 --window-count 2
  • With time period option
otp-cli-utils validate ABCDEF1234567890 123456 --time-period 120

Generate a New OTP Secret

Generate a new secure random secret key for OTP generation:

otp-cli-utils generate-secret

Generate QR Code for Authenticator Apps

  • Generate a QR code that can be scanned by Google Authenticator or similar apps
  • QR code will be generated with a new secure random secret key
  • Generated QR code will be saved as a png image file
otp-cli-utils generate-secret-qr-code <label> <issuer> [filename]

Arguments:

  • label: Account name (e.g., user@example.com)
  • issuer: Service or provider name (e.g., GitHub)
  • filename: (Optional) Output filename without extension (default: otp_secret_qr)

Example:

otp-cli-utils generate-secret-qr-code "user@example.com" "GitHub" github_2fa

Exit Codes

  • 0: Command executed successfully
  • 1: Invalid OTP (for validate command) or error occurred

Input Validation

The tool performs the following validations on the inputs:

  • OTP Secret:

    • Must be a valid Base32 encoded string.
    • The length of the secret must be a multiple of 8.
    • It can only contain uppercase letters (A-Z), digits from 2 to 7, and the padding character (=).
  • OTP Code:

    • Must be a 6-digit number.
  • Window Count (--window-count, -w):

    • Must be an integer.
    • Must be a non-negative number (0 or greater).
  • Time Period (--time-period, -t):

    • Must be an integer.
    • Must be 30 seconds or greater.
    • Must be a multiple of 30.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

otp_cli_utils-1.5.0.tar.gz (11.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

otp_cli_utils-1.5.0-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

Details for the file otp_cli_utils-1.5.0.tar.gz.

File metadata

  • Download URL: otp_cli_utils-1.5.0.tar.gz
  • Upload date:
  • Size: 11.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for otp_cli_utils-1.5.0.tar.gz
Algorithm Hash digest
SHA256 6a750673ff7abb6620539bd9e7ee51c9125cf0d0f96fe392dbd0f905aad26e1b
MD5 96d548f08c5ebc7841d4f4d48c2805d2
BLAKE2b-256 8481319d30fbfb7ee128235249b67128e08e69e4494b19cc59ff2ff78ab389d4

See more details on using hashes here.

File details

Details for the file otp_cli_utils-1.5.0-py3-none-any.whl.

File metadata

  • Download URL: otp_cli_utils-1.5.0-py3-none-any.whl
  • Upload date:
  • Size: 15.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for otp_cli_utils-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 31ae66e0f140a19b2d32d2c5365f610c7574f0923fcb6ed69e1ab89761f0ac7b
MD5 dbf8d53644d5cacbc8b00f9416ba6b13
BLAKE2b-256 0282dffae32dc80db5575628fbe53c5f6bdf3f05be410fa8e2eb2d8b80445c62

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page