diff options
author | Vivien Kraus <vivien@planete-kraus.eu> | 2020-01-01 00:00:00 +0100 |
---|---|---|
committer | Vivien Kraus <vivien@planete-kraus.eu> | 2021-06-19 15:44:24 +0200 |
commit | fbdb021dc275080f1e817317306defc354828715 (patch) | |
tree | 6b7df45e448ed296958b97178d5c11222dc4c9d8 /src/jwk/generate-key.c | |
parent | c54ad2f70f705a62946fb93902f9a9bd65ae1fed (diff) |
Generate a key pair.
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; +} |