+static void acmd_algs(admin *a, unsigned ac, char *av[])
+{
+ peer *p;
+ const kdata *kd;
+ const dhgrp *g;
+ const algswitch *algs;
+
+ if (!ac)
+ kd = master;
+ else {
+ if ((p = a_findpeer(a, av[0])) == 0) return;
+ kd = p->kx.kpriv;
+ }
+ g = kd->grp;
+ algs = &kd->algs;
+
+ g->ops->grpinfo(g, a);
+ 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->ops->name,
+ "bulk-overhead=%lu",
+ (unsigned long)algs->bulk->ops->overhead(algs->bulk),
+ A_END);
+ algs->bulk->ops->alginfo(algs->bulk, a);
+ a_info(a,
+ "cipher-data-limit=%lu",
+ (unsigned long)algs->bulk->ops->expsz(algs->bulk),
+ A_END);
+ a_ok(a);
+}
+