summaryrefslogtreecommitdiffstats
path: root/sys/geom/eli/g_eli.c
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2006-08-11 19:09:12 +0000
committerpjd <pjd@FreeBSD.org>2006-08-11 19:09:12 +0000
commit3a923dc02730b0a3c108dde04813059f81889161 (patch)
tree026fc5f6f974bde84ae7f5ab282d6a49736f62ab /sys/geom/eli/g_eli.c
parentd9810ee8e29c0c3fee432a1a3ca4c150f11e98e2 (diff)
downloadFreeBSD-src-3a923dc02730b0a3c108dde04813059f81889161.zip
FreeBSD-src-3a923dc02730b0a3c108dde04813059f81889161.tar.gz
Before using byte offset for IV creation, covert it to little endian.
This way one will be able to use provider encrypted on eg. i386 on eg. sparc64. This doesn't really buy us much today, because UFS isn't endian agnostic. We retain backward compatibility by setting G_ELI_FLAG_NATIVE_BYTE_ORDER flag on devices with version number less than 2 and not converting the offset.
Diffstat (limited to 'sys/geom/eli/g_eli.c')
-rw-r--r--sys/geom/eli/g_eli.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/geom/eli/g_eli.c b/sys/geom/eli/g_eli.c
index 8844297..51846fc 100644
--- a/sys/geom/eli/g_eli.c
+++ b/sys/geom/eli/g_eli.c
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2005 Pawel Jakub Dawidek <pjd@FreeBSD.org>
+ * Copyright (c) 2005-2006 Pawel Jakub Dawidek <pjd@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -365,9 +365,11 @@ void
g_eli_crypto_ivgen(struct g_eli_softc *sc, off_t offset, u_char *iv,
size_t size)
{
- u_char hash[SHA256_DIGEST_LENGTH];
+ u_char off[8], hash[SHA256_DIGEST_LENGTH];
SHA256_CTX ctx;
+ if (!(sc->sc_flags & G_ELI_FLAG_NATIVE_BYTE_ORDER))
+ le64enc(off, (uint64_t)offset);
/* Copy precalculated SHA256 context for IV-Key. */
bcopy(&sc->sc_ivctx, &ctx, sizeof(ctx));
SHA256_Update(&ctx, (uint8_t *)&offset, sizeof(offset));
@@ -515,6 +517,9 @@ g_eli_create(struct gctl_req *req, struct g_class *mp, struct g_provider *bpp,
sc->sc_crypto = G_ELI_CRYPTO_SW;
sc->sc_flags = md->md_flags;
+ /* Backward compatibility. */
+ if (md->md_version < 2)
+ sc->sc_flags |= G_ELI_FLAG_NATIVE_BYTE_ORDER;
sc->sc_ealgo = md->md_ealgo;
sc->sc_nkey = nkey;
/*
@@ -999,6 +1004,7 @@ g_eli_dumpconf(struct sbuf *sb, const char *indent, struct g_geom *gp,
sbuf_printf(sb, name); \
} \
} while (0)
+ ADD_FLAG(G_ELI_FLAG_NATIVE_BYTE_ORDER, "NATIVE-BYTE-ORDER");
ADD_FLAG(G_ELI_FLAG_ONETIME, "ONETIME");
ADD_FLAG(G_ELI_FLAG_BOOT, "BOOT");
ADD_FLAG(G_ELI_FLAG_WO_DETACH, "W-DETACH");
OpenPOWER on IntegriCloud