summaryrefslogtreecommitdiffstats
path: root/sys/geom/eli/g_eli_ctl.c
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2005-08-19 22:19:25 +0000
committerpjd <pjd@FreeBSD.org>2005-08-19 22:19:25 +0000
commit0c33c951a50ade7875ec7b14b3a270e9c45e5187 (patch)
tree4151ed05b1ad625b1381a18bfe05d224cdf04faa /sys/geom/eli/g_eli_ctl.c
parente6d1db2424ecd4a4f4b5da6b64e52f85353d478f (diff)
downloadFreeBSD-src-0c33c951a50ade7875ec7b14b3a270e9c45e5187.zip
FreeBSD-src-0c33c951a50ade7875ec7b14b3a270e9c45e5187.tar.gz
Allow to change number of iterations for PKCS#5v2. It can only be used
when there is only one key set. MFC after: 3 days
Diffstat (limited to 'sys/geom/eli/g_eli_ctl.c')
-rw-r--r--sys/geom/eli/g_eli_ctl.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/sys/geom/eli/g_eli_ctl.c b/sys/geom/eli/g_eli_ctl.c
index d2ffdd9..9ce3064 100644
--- a/sys/geom/eli/g_eli_ctl.c
+++ b/sys/geom/eli/g_eli_ctl.c
@@ -327,8 +327,7 @@ g_eli_ctl_setkey(struct gctl_req *req, struct g_class *mp)
const char *name;
u_char *key, *mkeydst, *sector;
intmax_t *valp;
- int nkey;
- int keysize, error;
+ int keysize, nkey, error;
g_topology_assert();
@@ -366,6 +365,26 @@ g_eli_ctl_setkey(struct gctl_req *req, struct g_class *mp)
return;
}
+ valp = gctl_get_paraml(req, "iterations", sizeof(*valp));
+ if (valp == NULL) {
+ gctl_error(req, "No '%s' argument.", "iterations");
+ return;
+ }
+ /* Check if iterations number should and can be changed. */
+ if (*valp != -1) {
+ if (bitcount32(md.md_keys) != 1) {
+ gctl_error(req, "To be able to use '-i' option, only "
+ "one key can be defined.");
+ return;
+ }
+ if (md.md_keys != (1 << nkey)) {
+ gctl_error(req, "Only already defined key can be "
+ "changed when '-i' option is used.");
+ return;
+ }
+ md.md_iterations = *valp;
+ }
+
key = gctl_get_param(req, "key", &keysize);
if (key == NULL || keysize != G_ELI_USERKEYLEN) {
bzero(&md, sizeof(md));
OpenPOWER on IntegriCloud