X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fgnunet-rsa.c;h=ab4bf2cb0fe01ce876bdc3b2a97c3d808d58a619;hb=72c8645af31896829b674b575c5375706f362a30;hp=ba0d16a74d38401a3923a3726881e7e300aebae0;hpb=f8a243de65a26b382ed76be77598e285876d85fd;p=oweals%2Fgnunet.git diff --git a/src/util/gnunet-rsa.c b/src/util/gnunet-rsa.c index ba0d16a74..ab4bf2cb0 100644 --- a/src/util/gnunet-rsa.c +++ b/src/util/gnunet-rsa.c @@ -25,13 +25,23 @@ */ #include "platform.h" #include "gnunet_util_lib.h" -#include "gnunet_rsa_service.h" +#include /** - * Flag for reverse lookup. + * Flag for printing public key. */ -static int print; +static int print_public_key; + +/** + * Flag for printing hash of public key. + */ +static int print_peer_identity; + +/** + * Flag for printing short hash of public key. + */ +static int print_short_identity; /** @@ -48,45 +58,81 @@ run (void *cls, char *const *args, const char *cfgfile, { struct GNUNET_CRYPTO_RsaPrivateKey *pk; struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pub; - char *s; + struct GNUNET_PeerIdentity pid; - if (argc == 0) + if (NULL == args[0]) { fprintf (stderr, _("No hostkey file specified on command line\n")); return; } - pk = GNUNET_CRYPTO_rsa_key_create_from_file (argv[0]); - if (print) + pk = GNUNET_CRYPTO_rsa_key_create_from_file (args[0]); + if (NULL == pk) + return; + if (print_public_key) { + char *s; + GNUNET_CRYPTO_rsa_key_get_public (pk, &pub); s = GNUNET_CRYPTO_rsa_public_key_to_string (&pub); fprintf (stdout, "%s\n", s); GNUNET_free (s); } + if (print_peer_identity) + { + struct GNUNET_CRYPTO_HashAsciiEncoded enc; + + GNUNET_CRYPTO_rsa_key_get_public (pk, &pub); + GNUNET_CRYPTO_hash (&pub, sizeof (pub), &pid.hashPubKey); + GNUNET_CRYPTO_hash_to_enc (&pid.hashPubKey, &enc); + fprintf (stdout, "%s\n", enc.encoding); + } + if (print_short_identity) + { + struct GNUNET_CRYPTO_ShortHashAsciiEncoded enc; + struct GNUNET_CRYPTO_ShortHashCode sh; + + GNUNET_CRYPTO_rsa_key_get_public (pk, &pub); + GNUNET_CRYPTO_short_hash (&pub, sizeof (pub), &sh); + GNUNET_CRYPTO_short_hash_to_enc (&sh, &enc); + fprintf (stdout, "%s\n", enc.short_encoding); + } GNUNET_CRYPTO_rsa_key_free (pk); } /** - * The main function to obtain statistics in GNUnet. + * Program to manipulate RSA key files. * * @param argc number of arguments from the command line * @param argv command line arguments * @return 0 ok, 1 on error */ int -main (int argc, char *const *argv) +main (int argc, char *const*argv) { static const struct GNUNET_GETOPT_CommandLineOption options[] = { - { 'p', "print", NULL, + { 'p', "print-public-key", NULL, gettext_noop ("print the public key in ASCII format"), - 0, &GNUNET_GETOPT_set_one, &print }, + 0, &GNUNET_GETOPT_set_one, &print_public_key }, + { 'P', "print-peer-identity", NULL, + gettext_noop ("print the hash of the public key in ASCII format"), + 0, &GNUNET_GETOPT_set_one, &print_peer_identity }, + { 's', "print-short-identity", NULL, + gettext_noop ("print the short hash of the public key in ASCII format"), + 0, &GNUNET_GETOPT_set_one, &print_short_identity }, GNUNET_GETOPT_OPTION_END }; - return (GNUNET_OK == - GNUNET_PROGRAM_run (argc, argv, "gnunet-rsa [OPTIONS] keyfile", - gettext_noop ("Manipulate GNUnet private RSA key files"), - options, &run, NULL)) ? 0 : 1; + int ret; + + if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv)) + return 2; + + ret = (GNUNET_OK == + GNUNET_PROGRAM_run (argc, argv, "gnunet-rsa [OPTIONS] keyfile", + gettext_noop ("Manipulate GNUnet private RSA key files"), + options, &run, NULL)) ? 0 : 1; + GNUNET_free ((void*) argv); + return ret; } /* end of gnunet-rsa.c */