diff options
author | Vivien Kraus <vivien@planete-kraus.eu> | 2020-01-01 00:00:00 +0100 |
---|---|---|
committer | Vivien Kraus <vivien@planete-kraus.eu> | 2021-05-11 00:14:28 +0200 |
commit | e6d0786c537a8fdc757387dccf0e6d97e8f5e783 (patch) | |
tree | 8f6ef0f8ec047f719d0d90882714d3cd01876958 /src/jwk/generate-key.c | |
parent | d33b47eb282d6b46378e88df3693caa7ce4f1cce (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; +} |