Name | hanifx JSON |
Version |
20.0.0
JSON |
| download |
home_page | https://github.com/hanifx-540 |
Summary | Offline OTP Generator (TOTP/HOTP) with QR and backup codes |
upload_time | 2025-08-21 22:25:43 |
maintainer | None |
docs_url | None |
author | Hanif |
requires_python | >=3.7 |
license | None |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# hanifx
hanifx OTP Module - Offline TOTP/HOTP generator with backup codes and QR generation.
## Installation
```bash
pip install hanifx
import hanifx
secret = hanifx.otp_secret()
otp = hanifx.otp_generate(secret)
print("OTP:", otp)
print("Valid?", hanifx.otp_verify(secret, otp))
backup = hanifx.otp_backup(secret)
print("Backup Codes:", backup)
qr_bytes = hanifx.otp_qr(secret, account="hanif", issuer="hanifx")
with open("hanifx_qr.png", "wb") as f:
f.write(qr_bytes)
Raw data
{
"_id": null,
"home_page": "https://github.com/hanifx-540",
"name": "hanifx",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": null,
"author": "Hanif",
"author_email": "sajim4653@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/62/a5/48de7c57bee4819a75dd32d0f22e5f2fd377494c5e68f80897dee57fd044/hanifx-20.0.0.tar.gz",
"platform": null,
"description": "# hanifx\n\nhanifx OTP Module - Offline TOTP/HOTP generator with backup codes and QR generation.\n\n## Installation\n```bash\npip install hanifx\n\nimport hanifx\n\nsecret = hanifx.otp_secret()\notp = hanifx.otp_generate(secret)\nprint(\"OTP:\", otp)\nprint(\"Valid?\", hanifx.otp_verify(secret, otp))\nbackup = hanifx.otp_backup(secret)\nprint(\"Backup Codes:\", backup)\nqr_bytes = hanifx.otp_qr(secret, account=\"hanif\", issuer=\"hanifx\")\nwith open(\"hanifx_qr.png\", \"wb\") as f:\n f.write(qr_bytes)\n",
"bugtrack_url": null,
"license": null,
"summary": "Offline OTP Generator (TOTP/HOTP) with QR and backup codes",
"version": "20.0.0",
"project_urls": {
"Homepage": "https://github.com/hanifx-540"
},
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "5592a7ba214ba00b0999f20c43000fc02aaf4ea663e584406b2937bb3f422f10",
"md5": "d1682cd8d05d2d2c54cf001b93d09618",
"sha256": "1187e60f3d8738a6808ab1368fb94aa1e488c5a657444d2e0cee1ff47c583762"
},
"downloads": -1,
"filename": "hanifx-20.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d1682cd8d05d2d2c54cf001b93d09618",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 2807,
"upload_time": "2025-08-21T22:25:41",
"upload_time_iso_8601": "2025-08-21T22:25:41.880442Z",
"url": "https://files.pythonhosted.org/packages/55/92/a7ba214ba00b0999f20c43000fc02aaf4ea663e584406b2937bb3f422f10/hanifx-20.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "62a548de7c57bee4819a75dd32d0f22e5f2fd377494c5e68f80897dee57fd044",
"md5": "6f3c169148b73d98015068cd84bae6af",
"sha256": "b292f7fb4b6abfb972e597912dd4b400f78c4de66b1c0119d77aae550ba78b33"
},
"downloads": -1,
"filename": "hanifx-20.0.0.tar.gz",
"has_sig": false,
"md5_digest": "6f3c169148b73d98015068cd84bae6af",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 2385,
"upload_time": "2025-08-21T22:25:43",
"upload_time_iso_8601": "2025-08-21T22:25:43.416319Z",
"url": "https://files.pythonhosted.org/packages/62/a5/48de7c57bee4819a75dd32d0f22e5f2fd377494c5e68f80897dee57fd044/hanifx-20.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-21 22:25:43",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "hanifx"
}