summaryrefslogtreecommitdiff
path: root/src/jwk/generate-key.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/jwk/generate-key.c')
-rw-r--r--src/jwk/generate-key.c59
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;
+}