using AS1024.Wireguard.Utils; const string Help = """ wgkey - WireGuard key utility wgkey gen wgkey pub wgkey decode """; if (args.Length == 0 || args[0] is "-h" or "--help" or "help") { Console.WriteLine(Help); return 0; } try { // TODO: stdin mode? switch (args[0]) { case "gen": { var priv = WireGuardKeyUtils.GeneratePrivateKey(); var pub = WireGuardKeyUtils.GetPublicKey(priv); Console.WriteLine($"private={Convert.ToBase64String(priv)}"); Console.WriteLine($"public={Convert.ToBase64String(pub)}"); return 0; } case "pub" when args.Length == 2: Console.WriteLine(Convert.ToBase64String( WireGuardKeyUtils.GetPublicKey(WireGuardKeyUtils.FromBase64(args[1])))); return 0; case "decode" when args.Length == 2: Console.WriteLine(Convert.ToHexString(WireGuardKeyUtils.FromBase64(args[1])).ToLowerInvariant()); return 0; default: Console.Error.WriteLine(Help); return 1; } } catch (Exception e) when (e is ArgumentException or FormatException) { Console.Error.WriteLine(e.Message); return 1; }