diff options
Diffstat (limited to 'src/jwk/generate-key.c')
-rw-r--r-- | src/jwk/generate-key.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/jwk/generate-key.c b/src/jwk/generate-key.c new file mode 100644 index 0000000..ec8ce76 --- /dev/null +++ b/src/jwk/generate-key.c @@ -0,0 +1,59 @@ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif /* HAVE_CONFIG_H */ + +#include <stdio.h> +#include <stdlib.h> +#include <libguile.h> +#include <gettext.h> + +#define _(s) gettext (s) + +SCM webidoidc_generate_key_g (SCM args); + +extern int init_webidoidc (void); + +static void +run (void *params, int argc, char *argv[]) +{ + SCM data; + char *end; + size_t n_size = 0; + (void) params; + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + if (argc != 2 + || (strcmp (argv[1], "P-256") != 0 + && strcmp (argv[1], "P-384") != 0 + && strcmp (argv[1], "P-521") != 0 + && ((n_size = strtoull (argv[1], &end, 10)) == 0 || *end != '\0'))) + { + fprintf (stderr, _("Usage: generate-key [NUMBER OF BITS | CURVE]\n")); + exit (1); + } + init_webidoidc (); + if (strcmp (argv[1], "P-256") == 0 + || strcmp (argv[1], "P-384") == 0 || strcmp (argv[1], "P-521") == 0) + { + data = + webidoidc_generate_key_g (scm_list_2 + (scm_from_utf8_keyword ("crv"), + scm_from_utf8_symbol (argv[1]))); + } + else + { + data = + webidoidc_generate_key_g (scm_list_2 + (scm_from_utf8_keyword ("n-size"), + scm_from_size_t (n_size))); + } + scm_display (data, scm_current_output_port ()); +} + +int +main (int argc, char *argv[]) +{ + scm_boot_guile (argc, argv, run, NULL); + return 0; +} |