summaryrefslogtreecommitdiffstats
path: root/sys/geom/eli/g_eli_key.c
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2010-10-22 22:13:11 +0000
committerpjd <pjd@FreeBSD.org>2010-10-22 22:13:11 +0000
commitb022d9547307fbceeac6ec2faa6ad85e69251dce (patch)
tree316a922a431709968ee4aa1c264bec80ddf0e9e2 /sys/geom/eli/g_eli_key.c
parentb7d601dc3a6d6bf34e079e05898cf7ec033754f4 (diff)
downloadFreeBSD-src-b022d9547307fbceeac6ec2faa6ad85e69251dce.zip
FreeBSD-src-b022d9547307fbceeac6ec2faa6ad85e69251dce.tar.gz
Move sc_akeyctx and sc_ivctx initialization to the g_eli_mkey_propagate()
function which eliminates code duplication and will ensure proper order of operation.
Diffstat (limited to 'sys/geom/eli/g_eli_key.c')
-rw-r--r--sys/geom/eli/g_eli_key.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/sys/geom/eli/g_eli_key.c b/sys/geom/eli/g_eli_key.c
index bb060e4..37b2ad3 100644
--- a/sys/geom/eli/g_eli_key.c
+++ b/sys/geom/eli/g_eli_key.c
@@ -264,5 +264,30 @@ g_eli_mkey_propagate(struct g_eli_softc *sc, const unsigned char *mkey)
/* Generate all encryption keys. */
g_eli_ekeys_generate(sc);
}
+
+ if (sc->sc_flags & G_ELI_FLAG_AUTH) {
+ /*
+ * Precalculate SHA256 for HMAC key generation.
+ * This is expensive operation and we can do it only once now or
+ * for every access to sector, so now will be much better.
+ */
+ SHA256_Init(&sc->sc_akeyctx);
+ SHA256_Update(&sc->sc_akeyctx, sc->sc_akey,
+ sizeof(sc->sc_akey));
+ }
+ /*
+ * Precalculate SHA256 for IV generation.
+ * This is expensive operation and we can do it only once now or for
+ * every access to sector, so now will be much better.
+ */
+ switch (sc->sc_ealgo) {
+ case CRYPTO_AES_XTS:
+ break;
+ default:
+ SHA256_Init(&sc->sc_ivctx);
+ SHA256_Update(&sc->sc_ivctx, sc->sc_ivkey,
+ sizeof(sc->sc_ivkey));
+ break;
+ }
}
#endif
OpenPOWER on IntegriCloud