58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
"""Command line interface around the salt hashing helpers."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
from typing import Sequence
|
|
|
|
from salt import hash_password, verify_password
|
|
|
|
|
|
def _build_parser() -> argparse.ArgumentParser:
|
|
parser = argparse.ArgumentParser(
|
|
description="CLI für PBKDF2-Hashing inklusive Verify-Modus."
|
|
)
|
|
subparsers = parser.add_subparsers(dest="command", required=True)
|
|
|
|
generate_parser = subparsers.add_parser(
|
|
"generate", help="Erzeugt ein neues Salt+Hash Paar."
|
|
)
|
|
generate_parser.add_argument("password", help="Klartext-Passwort zum Hashen.")
|
|
|
|
verify_parser = subparsers.add_parser(
|
|
"verify",
|
|
help="Validiert ein Passwort anhand von Salt und Hash.",
|
|
)
|
|
verify_parser.add_argument("password", help="Passwort zum Prüfen.")
|
|
verify_parser.add_argument("salt", help="Base64-kodiertes Salt.")
|
|
verify_parser.add_argument("hash", help="Base64-kodierter Hash.")
|
|
return parser
|
|
|
|
|
|
def _command_generate(args: argparse.Namespace) -> int:
|
|
salt, hash_value = hash_password(args.password)
|
|
print(f"Salt: {salt}")
|
|
print(f"Hash: {hash_value}")
|
|
return 0
|
|
|
|
|
|
def _command_verify(args: argparse.Namespace) -> int:
|
|
if verify_password(args.password, args.salt, args.hash):
|
|
print("✓ Passwort korrekt")
|
|
return 0
|
|
print("✗ Passwort falsch")
|
|
return 1
|
|
|
|
|
|
def main(argv: Sequence[str] | None = None) -> int:
|
|
parser = _build_parser()
|
|
args = parser.parse_args(argv)
|
|
if args.command == "generate":
|
|
return _command_generate(args)
|
|
return _command_verify(args)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|