Skip to main content

strat9_kernel/shell/commands/sys/
crypto.rs

1use super::*;
2
3/// Crypto key management command.
4///
5/// Usage: `crypto keys` - list trusted keys
6///        `crypto info` - show crypto subsystem status
7pub fn cmd_crypto(args: &[String]) -> Result<(), ShellError> {
8    if args.is_empty() {
9        shell_println!("Usage: crypto <keys|info>");
10        shell_println!("  crypto keys  - list trusted signing keys");
11        shell_println!("  crypto info  - show crypto subsystem status");
12        return Err(ShellError::InvalidArguments);
13    }
14
15    match args[0].as_str() {
16        "keys" => cmd_crypto_keys(),
17        "info" => cmd_crypto_info(),
18        _ => {
19            shell_println!("Usage: crypto <keys|info>");
20            Err(ShellError::InvalidArguments)
21        }
22    }
23}
24
25/// List all registered trusted signing keys.
26fn cmd_crypto_keys() -> Result<(), ShellError> {
27    let count = crate::crypto::trusted_key_count();
28    shell_println!("Trusted signing keys: {}", count);
29    shell_println!("");
30
31    if count == 0 {
32        shell_println!("  (no keys registered)");
33        return Ok(());
34    }
35
36    shell_println!(
37        "  {:<12} {:<40} {}",
38        "Key ID",
39        "Public Key (first 8 bytes)",
40        "Label"
41    );
42    shell_println!(
43        "  {:<12} {:<40} {}",
44        "------",
45        "---------------------------",
46        "-----"
47    );
48
49    // We can't iterate directly, but we know the dev key
50    if crate::crypto::is_key_trusted(b"STRAT9D1") {
51        shell_println!(
52            "  {:<12} {:<40} {}",
53            "STRAT9D1",
54            "d75a980182b10c73...",
55            "strat9-dev"
56        );
57    }
58
59    Ok(())
60}
61
62/// Show crypto subsystem status.
63fn cmd_crypto_info() -> Result<(), ShellError> {
64    shell_println!("Crypto Subsystem");
65    shell_println!("  Algorithm:      Ed25519 (EC25519)");
66    shell_println!("  Hash:           SHA-512 (internal to Ed25519)");
67    shell_println!(
68        "  Key Store:      {} trusted key(s)",
69        crate::crypto::trusted_key_count()
70    );
71    shell_println!("  Verification:   Ed25519 signature verification");
72    shell_println!("  Module Format:  CMOD with Ed25519 signatures");
73    shell_println!("");
74    shell_println!("  Module signing workflow:");
75    shell_println!(
76        "    1. Generate keypair:  ed25519-keygen > key.priv && ed25519-keygen -x > key.pub"
77    );
78    shell_println!("    2. Sign module:       openssl pkeyutl -sign -inkey key.priv -in module.cmod -out sig.bin");
79    shell_println!("    3. Embed signature:   Place signature in CMOD header (offset 91)");
80    shell_println!("    4. Register key:      Add public key to kernel trusted key store");
81    Ok(())
82}