/* filled in during setup: */
struct cloc loc; /* line is runtime */
struct log_if *log;
+ struct hash_if *defhash;
struct buffer_if *data_buf;
struct peer_keyset *building;
/* runtime: */
bool_t ok=c->scheme->loadpub(c->scheme,c->data_buf,
&pubkey,c->log,c->loc);
if (!ok) break;
+ if (pubkey->sethash) {
+ if (!c->defhash) {
+ pubkey->dispose(pubkey->st);
+ DOSKIP("public key requires default hash to load");
+ }
+ pubkey->sethash(pubkey->st,c->defhash);
+ }
memcpy(c->building->keys[c->building->nkeys].id.b,
c->grpid,
GRPIDSZ);
extern struct peer_keyset *
keyset_load(const char *path, struct buffer_if *data_buf,
- struct log_if *log, int logcl_enoent) {
+ struct log_if *log, int logcl_enoent,
+ struct hash_if *defhash) {
assert(!c->building);
c->log=log;
+ c->defhash=defhash;
c->loc.file=path;
pkyyin = fopen(path, "r");
if (!pkyyin) {
int r=pkyylex();
if (r) goto err_bad;
- if (!c->had_serial) {
- slilog(LI,M_ERR,"missing serial number in %s",path);
- goto err_bad;
- }
if (!c->building->nkeys) {
slilog(LI,M_ERR,"no useable keys in %s",path);
goto err_bad;