diff options
Diffstat (limited to 'src/lib/testing/list-keys.c')
-rw-r--r-- | src/lib/testing/list-keys.c | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/src/lib/testing/list-keys.c b/src/lib/testing/list-keys.c new file mode 100644 index 000000000..f65b45a77 --- /dev/null +++ b/src/lib/testing/list-keys.c | |||
@@ -0,0 +1,112 @@ | |||
1 | #include "platform.h" | ||
2 | #include "gnunet_util_lib.h" | ||
3 | #include "gnunet_testing_lib.h" | ||
4 | |||
5 | static unsigned int nkeys; | ||
6 | static unsigned int nskip; | ||
7 | static int result; | ||
8 | |||
9 | /** | ||
10 | * Main run function. | ||
11 | * | ||
12 | * @param cls NULL | ||
13 | * @param args arguments passed to GNUNET_PROGRAM_run | ||
14 | * @param cfgfile the path to configuration file | ||
15 | * @param cfg the configuration file handle | ||
16 | */ | ||
17 | static void | ||
18 | run (void *cls, | ||
19 | char *const *args, | ||
20 | const char *cfgfile, | ||
21 | const struct GNUNET_CONFIGURATION_Handle *config) | ||
22 | { | ||
23 | char *idfile; | ||
24 | struct GNUNET_DISK_FileHandle *f; | ||
25 | void *data; | ||
26 | struct GNUNET_DISK_MapHandle *map; | ||
27 | struct GNUNET_CRYPTO_EddsaPrivateKey pkey; | ||
28 | struct GNUNET_PeerIdentity id; | ||
29 | unsigned int cnt; | ||
30 | uint64_t fsize; | ||
31 | unsigned int nmax; | ||
32 | |||
33 | if ((NULL == args) || (NULL == args[0])) | ||
34 | { | ||
35 | fprintf (stderr, "Need the hostkey file\n"); | ||
36 | return; | ||
37 | } | ||
38 | idfile = args[0]; | ||
39 | if (GNUNET_OK != | ||
40 | GNUNET_DISK_file_size (idfile, &fsize, GNUNET_YES, GNUNET_YES)) | ||
41 | { | ||
42 | GNUNET_break (0); | ||
43 | return; | ||
44 | } | ||
45 | if (0 != (fsize % GNUNET_TESTING_HOSTKEYFILESIZE)) | ||
46 | { | ||
47 | fprintf (stderr, _ ("Incorrect hostkey file format: %s\n"), idfile); | ||
48 | return; | ||
49 | } | ||
50 | f = GNUNET_DISK_file_open (idfile, | ||
51 | GNUNET_DISK_OPEN_READ, | ||
52 | GNUNET_DISK_PERM_NONE); | ||
53 | if (NULL == f) | ||
54 | { | ||
55 | GNUNET_break (0); | ||
56 | return; | ||
57 | } | ||
58 | data = GNUNET_DISK_file_map (f, &map, GNUNET_DISK_MAP_TYPE_READ, fsize); | ||
59 | if (NULL == data) | ||
60 | { | ||
61 | GNUNET_break (0); | ||
62 | GNUNET_DISK_file_close (f); | ||
63 | return; | ||
64 | } | ||
65 | nmax = fsize / GNUNET_TESTING_HOSTKEYFILESIZE; | ||
66 | for (cnt = nskip; cnt < (nskip + nkeys); cnt++) | ||
67 | { | ||
68 | if (nskip + cnt >= nmax) | ||
69 | { | ||
70 | printf ("Max keys %u reached\n", nmax); | ||
71 | break; | ||
72 | } | ||
73 | GNUNET_memcpy (&pkey, | ||
74 | data + (cnt * GNUNET_TESTING_HOSTKEYFILESIZE), | ||
75 | GNUNET_TESTING_HOSTKEYFILESIZE); | ||
76 | GNUNET_CRYPTO_eddsa_key_get_public (&pkey, &id.public_key); | ||
77 | printf ("Key %u: %s\n", cnt, GNUNET_i2s_full (&id)); | ||
78 | } | ||
79 | result = GNUNET_OK; | ||
80 | GNUNET_DISK_file_unmap (map); | ||
81 | GNUNET_DISK_file_close (f); | ||
82 | } | ||
83 | |||
84 | |||
85 | int | ||
86 | main (int argc, char *argv[]) | ||
87 | { | ||
88 | struct GNUNET_GETOPT_CommandLineOption option[] = | ||
89 | { GNUNET_GETOPT_option_uint ('n', | ||
90 | "num-keys", | ||
91 | "COUNT", | ||
92 | gettext_noop ("list COUNT number of keys"), | ||
93 | &nkeys), | ||
94 | GNUNET_GETOPT_OPTION_END }; | ||
95 | int ret; | ||
96 | |||
97 | result = GNUNET_SYSERR; | ||
98 | nkeys = 10; | ||
99 | ret = | ||
100 | GNUNET_PROGRAM_run (argc, | ||
101 | argv, | ||
102 | "list-keys", | ||
103 | "Lists the peer IDs corresponding to the given keys file\n", | ||
104 | option, | ||
105 | &run, | ||
106 | NULL); | ||
107 | if (GNUNET_OK != ret) | ||
108 | return 1; | ||
109 | if (GNUNET_SYSERR == result) | ||
110 | return 1; | ||
111 | return 0; | ||
112 | } | ||