add changelog
[oweals/gnunet.git] / src / testing / list-keys.c
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 }