+static void acmd_algs(admin *a, unsigned ac, char *av[])
+{
+ peer *p;
+ const kdata *kd;
+ const group *g;
+ const algswitch *algs;
+
+ if (!ac)
+ kd = master;
+ else {
+ if ((p = a_findpeer(a, av[0])) == 0) return;
+ kd = p->kx.kpriv;
+ }
+ g = kd->g;
+ algs = &kd->algs;
+
+ a_info(a,
+ "kx-group=%s", g->ops->name,
+ "kx-group-order-bits=%lu", (unsigned long)mp_bits(g->r),
+ "kx-group-elt-bits=%lu", (unsigned long)g->nbits,
+ A_END);
+ a_info(a,
+ "hash=%s", algs->h->name,
+ "mgf=%s", algs->mgf->name,
+ "hash-sz=%lu", (unsigned long)algs->h->hashsz,
+ A_END);
+ a_info(a,
+ "bulk-transform=%s", algs->bulk->name,
+ "bulk-overhead=%lu", (unsigned long)algs->bulk->overhead(algs),
+ A_END);
+ if (algs->c) {
+ a_info(a,
+ "cipher=%s", algs->c->name,
+ "cipher-keysz=%lu", (unsigned long)algs->cksz,
+ "cipher-blksz=%lu", (unsigned long)algs->c->blksz,
+ A_END);
+ }
+ a_info(a,
+ "cipher-data-limit=%lu", (unsigned long)algs->expsz,
+ A_END);
+ if (algs->m) {
+ a_info(a,
+ "mac=%s", algs->m->name,
+ "mac-keysz=%lu", (unsigned long)algs->mksz,
+ "mac-tagsz=%lu", (unsigned long)algs->tagsz,
+ A_END);
+ }
+ if (algs->b) {
+ a_info(a,
+ "blkc=%.*s", strlen(algs->b->name) - 4, algs->b->name,
+ "blkc-keysz=%lu", (unsigned long)algs->bksz,
+ "blkc-blksz=%lu", (unsigned long)algs->b->blksz,
+ A_END);
+ }
+ a_ok(a);
+}
+