- buf = xmalloc(ch->hashsz);
- unhexify(buf, argv[1], ch->hashsz);
+ for (p = argv[1]; *p; p++) {
+ if (strchr(fpres->sep, *p)) continue;
+ dstr_putc(&dd, *p);
+ }
+ c = fpres->cdc->decoder(CDCF_IGNCASE | CDCF_IGNEQPAD |
+ CDCF_IGNSPC | CDCF_IGNNEWL);
+ if ((rc = c->ops->code(c, dd.buf, dd.len, &d)) != 0 ||
+ (rc = c->ops->code(c, 0, 0, &d)) != 0)
+ die(EXIT_FAILURE, "invalid fingerprint: %s", codec_strerror(rc));
+ c->ops->destroy(c);
+ if (d.len != ch->hashsz) {
+ die(EXIT_FAILURE, "incorrect fingerprint length (%lu != %lu)",
+ (unsigned long)d.len, (unsigned long)ch->hashsz);
+ }