Files
fourdst/fourdst/cli/keys/generate.py

39 lines
1.5 KiB
Python

# fourdst/cli/keys/generate.py
import typer
from pathlib import Path
from fourdst.core.keys import generate_key
keys_app = typer.Typer()
@keys_app.command("generate")
def keys_generate(
key_name: str = typer.Option("author_key", "--name", "-n", help="The base name for the generated key files."),
key_type: str = typer.Option("ed25519", "--type", "-t", help="Type of key to generate (ed25519|rsa).", case_sensitive=False),
output_dir: str = typer.Option(".", "--output", "-o", help="Directory to save the generated keys.")
):
"""
Generates a new Ed25519 or RSA key pair for signing bundles.
"""
def progress_callback(message):
typer.echo(message)
result = generate_key(
key_name=key_name,
key_type=key_type,
output_dir=Path(output_dir),
progress_callback=progress_callback
)
if result["success"]:
typer.echo("\n✅ PEM and OpenSSH-compatible keys generated successfully!")
typer.echo(f" -> Private Key (KEEP SECRET): {result['private_key_path']}")
typer.echo(f" -> Public Key (SHARE): {result['public_key_path']}")
typer.echo(f" -> OpenSSH Public Key: {result['openssh_public_key_path']}")
typer.echo(f" -> Key Type: {result['key_type'].upper()}")
typer.echo(f" -> Fingerprint: {result['fingerprint']}")
typer.echo("\nShare the public key with users who need to trust your bundles.")
else:
typer.secho(f"Error: {result['error']}", fg=typer.colors.RED)
raise typer.Exit(code=1)