progs/key.c: Use the mLib generic codec interface instead of base64_*.
authorMark Wooding <mdw@distorted.org.uk>
Fri, 29 May 2015 17:49:35 +0000 (18:49 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Fri, 29 May 2015 17:54:59 +0000 (18:54 +0100)
This means we can actually detect errors in the seed provided to `key
add -s'.

progs/key.c

index 83d27e5..4530d00 100644 (file)
@@ -38,6 +38,7 @@
 #include <string.h>
 #include <time.h>
 
+#include <mLib/codec.h>
 #include <mLib/base64.h>
 #include <mLib/mdwopt.h>
 #include <mLib/quis.h>
@@ -474,7 +475,7 @@ static void alg_dsaparam(keyopts *k)
     octet *p;
     size_t sz;
     dstr d = DSTR_INIT;
-    base64_ctx c;
+    codec *c;
     key_data *kd;
     dsa_seed ds;
 
@@ -511,11 +512,9 @@ static void alg_dsaparam(keyopts *k)
 
     /* --- Store the seed for future verification --- */
 
-    base64_init(&c);
-    c.maxline = 0;
-    c.indent = "";
-    base64_encode(&c, ds.p, ds.sz, &d);
-    base64_encode(&c, 0, 0, &d);
+    c = base64_class.encoder(0, "", 0);
+    c->ops->code(c, ds.p, ds.sz, &d); c->ops->code(c, 0, 0, &d);
+    c->ops->destroy(c);
     DPUTZ(&d);
     key_putattr(k->kf, k->k, "seed", d.buf);
     DRESET(&d);
@@ -1099,19 +1098,22 @@ static int cmd_add(int argc, char *argv[])
       } break;
 
       case 's': {
-       base64_ctx b;
+       codec *c;
+       int rc;
        dstr d = DSTR_INIT;
        if (seed) die(EXIT_FAILURE, "seed already set");
-       base64_init(&b);
-       base64_decode(&b, optarg, strlen(optarg), &d);
-       base64_decode(&b, 0, 0, &d);
+       c = base64_class.decoder(CDCF_IGNEQPAD);
+       if ((rc = c->ops->code(c, optarg, strlen(optarg), &d)) != 0 ||
+           (rc = c->ops->code(c, 0, 0, &d)) != 0)
+         die(EXIT_FAILURE, "invalid seed base64: %s", codec_strerror(rc));
+       c->ops->destroy(c);
        k.r = sa->gen(d.buf, d.len);
        seed = optarg;
        dstr_destroy(&d);
       } break;
 
       case 'n': {
-       base64_ctx b;
+       codec *c;
        dstr d = DSTR_INIT;
        char *p;
        unsigned n = strtoul(optarg, &p, 0);
@@ -1121,9 +1123,9 @@ static int cmd_add(int argc, char *argv[])
        n /= 8;
        p = xmalloc(n);
        rand_get(RAND_GLOBAL, p, n);
-       base64_init(&b);
-       base64_encode(&b, p, n, &d);
-       base64_encode(&b, 0, 0, &d);
+       c = base64_class.encoder(0, "", 0);
+       c->ops->code(c, p, n, &d); c->ops->code(c, 0, 0, &d);
+       c->ops->destroy(c);
        seed = d.buf;
        k.r = sa->gen(p, n);
       } break;