This means we can actually detect errors in the seed provided to `key
add -s'.
#include <string.h>
#include <time.h>
#include <string.h>
#include <time.h>
#include <mLib/base64.h>
#include <mLib/mdwopt.h>
#include <mLib/quis.h>
#include <mLib/base64.h>
#include <mLib/mdwopt.h>
#include <mLib/quis.h>
octet *p;
size_t sz;
dstr d = DSTR_INIT;
octet *p;
size_t sz;
dstr d = DSTR_INIT;
key_data *kd;
dsa_seed ds;
key_data *kd;
dsa_seed ds;
/* --- Store the seed for future verification --- */
/* --- 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);
DPUTZ(&d);
key_putattr(k->kf, k->k, "seed", d.buf);
DRESET(&d);
dstr d = DSTR_INIT;
if (seed) die(EXIT_FAILURE, "seed already set");
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': {
k.r = sa->gen(d.buf, d.len);
seed = optarg;
dstr_destroy(&d);
} break;
case 'n': {
dstr d = DSTR_INIT;
char *p;
unsigned n = strtoul(optarg, &p, 0);
dstr d = DSTR_INIT;
char *p;
unsigned n = strtoul(optarg, &p, 0);
n /= 8;
p = xmalloc(n);
rand_get(RAND_GLOBAL, p, n);
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;
seed = d.buf;
k.r = sa->gen(p, n);
} break;