-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
71 lines (63 loc) · 2.88 KB
/
Copy pathmain.cpp
File metadata and controls
71 lines (63 loc) · 2.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <cstring>
#include "Crypto.h"
#include "tools.h"
struct Command {
const char *name;
const char *desc;
int (*func)(int, char**);
};
static const Command commands[] = {
{"vain", "Generate vanity .b32.i2p address", tool_vain},
{"keygen", "Generate random I2P keys", tool_keygen},
{"keyinfo", "Display info about a private key", tool_keyinfo},
{"famtool", "Router family: generate, sign, or verify", tool_famtool},
{"routerinfo", "Display router info (hosts, ports, firewall rules)", tool_routerinfo},
{"regaddr", "Register an I2P address", tool_regaddr},
{"regaddr_3ld", "Register a 3LD address (3-step process)", tool_regaddr_3ld},
{"i2pbase64", "Encode/decode I2P Base64", tool_i2pbase64},
{"offlinekeys", "Generate offline signing keys", tool_offlinekeys},
{"b33address", "Convert Base64 destination to b33 address", tool_b33address},
{"regaddralias", "Register an address alias", tool_regaddralias},
{"x25519", "Generate X25519 key pair for encrypted LeaseSet", tool_x25519},
{"verifyhost", "Verify host record signature", tool_verifyhost},
{"autoconf_i2pd", "Interactive i2pd.conf generator", tool_autoconf_i2pd},
{nullptr, nullptr, nullptr}
};
static void print_usage(const char *prog) {
std::cout << "i2pbox — unified I2P toolkit (based on PurpleI2P/i2pd-tools)\n\n"
<< "Usage: " << prog << " <command> [args...]\n\n"
<< "Commands:\n";
for (const Command *c = commands; c->name; ++c) {
std::cout << " " << c->name;
int pad = 16 - (int)strlen(c->name);
for (int i = 0; i < pad; ++i) std::cout << ' ';
std::cout << c->desc << '\n';
}
std::cout << "\nExample: " << prog << " keygen my-router.keys EdDSA_SHA512_Ed25519\n";
std::cout << " " << prog << " keyinfo privatekey.dat\n";
}
int main(int argc, char *argv[]) {
if (argc < 2) {
print_usage(argv[0]);
return 1;
}
std::string cmd(argv[1]);
// Handle help flags at top level
if (cmd == "-h" || cmd == "--help" || cmd == "help") {
print_usage(argv[0]);
return 0;
}
for (const Command *c = commands; c->name; ++c) {
if (cmd == c->name) {
i2p::crypto::InitCrypto(true); // precomputation on (needed by vain)
// Shift argv: i2pbox cmd args... → cmd args...
int ret = c->func(argc - 1, argv + 1);
i2p::crypto::TerminateCrypto();
return ret;
}
}
std::cerr << "Unknown command: " << cmd << "\n";
print_usage(argv[0]);
return 1;
}