#!/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())