{
  "slug": "generate-hotp",
  "name": "gizza-ai/generate-hotp",
  "version": "0.1.0",
  "title": "HOTP Generator — counter-based one-time codes — gizza.ai",
  "description": "Generate counter-based one-time (HOTP, RFC 4226) codes from a base32 secret and a counter, in your browser. The secret never leaves your device.",
  "tags": [
    "hotp",
    "rfc4226",
    "one-time password",
    "otp",
    "2fa",
    "counter",
    "authenticator"
  ],
  "category": "security",
  "urls": {
    "page": "https://gizza.ai/tools/generate-hotp/",
    "markdown": "https://gizza.ai/tools/generate-hotp/index.md",
    "descriptor": "https://gizza.ai/tools/generate-hotp/tool.json",
    "deep_link_example": "https://gizza.ai/tools/generate-hotp/?secret=JBSWY3DPEHPK3PXP&counter=0&digits=6&algorithm=sha1"
  },
  "cli": "gizza tool generate-hotp \"JBSWY3DPEHPK3PXP\" 'counter=0'",
  "tool": {
    "description": "Generate a counter-based one-time code (HOTP, RFC 4226) from a base32 secret and a counter value. HOTP is event-based: each code is tied to a counter you increment per use (unlike TOTP, which uses the current time). digits (6-8, default 6) and algorithm (sha1 default / sha256 / sha512) are configurable. Returns the code for that counter. Runs locally — the secret never leaves the device.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "algorithm": {
          "default": "sha1",
          "description": "HMAC hash algorithm (default sha1, the standard for authenticator apps).",
          "enum": [
            "sha1",
            "sha256",
            "sha512"
          ],
          "type": "string"
        },
        "counter": {
          "description": "The counter value (a non-negative integer); incremented for each new code.",
          "minimum": 0,
          "type": "integer"
        },
        "digits": {
          "description": "Number of digits in the code (6, 7, or 8; default 6).",
          "maximum": 8,
          "minimum": 6,
          "type": "integer"
        },
        "secret": {
          "description": "The HOTP shared secret, base32-encoded (spaces and case are ignored).",
          "type": "string"
        }
      },
      "required": [
        "secret",
        "counter"
      ],
      "type": "object"
    }
  }
}