dm_target_crypt - add plain64 ivgen
authorAlex Hornung <ahornung@gmail.com>
Mon, 27 Jun 2011 16:50:42 +0000 (17:50 +0100)
committerAlex Hornung <ahornung@gmail.com>
Mon, 27 Jun 2011 16:50:42 +0000 (17:50 +0100)
 * The plain64 ivgen works just the same as the plain ivgen, but treats
   the sector as 64 bits.

sys/dev/disk/dm/targets/crypt/dm_target_crypt.c

index 0b6b80d..1906e48 100644 (file)
@@ -144,11 +144,13 @@ static ivgen_ctor_t       essiv_ivgen_ctor;
 static ivgen_dtor_t    essiv_ivgen_dtor;
 static ivgen_t         essiv_ivgen;
 static ivgen_t         plain_ivgen;
+static ivgen_t         plain64_ivgen;
 
 static struct iv_generator ivgens[] = {
        { .name = "essiv", .ctor = essiv_ivgen_ctor, .dtor = essiv_ivgen_dtor,
            .gen_iv = essiv_ivgen },
        { .name = "plain", .ctor = NULL, .dtor = NULL, .gen_iv = plain_ivgen },
+       { .name = "plain64", .ctor = NULL, .dtor = NULL, .gen_iv = plain64_ivgen },
        { NULL, NULL, NULL, NULL }
 };
 
@@ -422,6 +424,14 @@ plain_ivgen(dm_target_crypt_config_t *priv, u_int8_t *iv,
        dmtc_crypto_dispatch(opaque);
 }
 
+static void
+plain64_ivgen(dm_target_crypt_config_t *priv, u_int8_t *iv,
+    size_t iv_len, off_t sector, void *opaque)
+{
+       bzero(iv, iv_len);
+       *((uint64_t *)iv) = htole64((uint64_t)(sector + priv->iv_offset));
+       dmtc_crypto_dispatch(opaque);
+}
 
 #if 0
 static void