mirror of
https://gitlab.com/cryptsetup/cryptsetup.git
synced 2025-12-13 20:00:08 +01:00
Add plain64be IV to storage backend.
This commit is contained in:
@@ -32,7 +32,7 @@
|
|||||||
* IV documentation: https://gitlab.com/cryptsetup/cryptsetup/wikis/DMCrypt
|
* IV documentation: https://gitlab.com/cryptsetup/cryptsetup/wikis/DMCrypt
|
||||||
*/
|
*/
|
||||||
struct crypt_sector_iv {
|
struct crypt_sector_iv {
|
||||||
enum { IV_NONE, IV_NULL, IV_PLAIN, IV_PLAIN64, IV_ESSIV, IV_BENBI } type;
|
enum { IV_NONE, IV_NULL, IV_PLAIN, IV_PLAIN64, IV_ESSIV, IV_BENBI, IV_PLAIN64BE } type;
|
||||||
int iv_size;
|
int iv_size;
|
||||||
char *iv;
|
char *iv;
|
||||||
struct crypt_cipher *essiv_cipher;
|
struct crypt_cipher *essiv_cipher;
|
||||||
@@ -61,7 +61,7 @@ static int crypt_sector_iv_init(struct crypt_sector_iv *ctx,
|
|||||||
memset(ctx, 0, sizeof(*ctx));
|
memset(ctx, 0, sizeof(*ctx));
|
||||||
|
|
||||||
ctx->iv_size = crypt_cipher_blocksize(cipher_name);
|
ctx->iv_size = crypt_cipher_blocksize(cipher_name);
|
||||||
if (ctx->iv_size < 0)
|
if (ctx->iv_size < 8)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
|
||||||
if (!iv_name ||
|
if (!iv_name ||
|
||||||
@@ -74,6 +74,8 @@ static int crypt_sector_iv_init(struct crypt_sector_iv *ctx,
|
|||||||
ctx->type = IV_NULL;
|
ctx->type = IV_NULL;
|
||||||
} else if (!strcasecmp(iv_name, "plain64")) {
|
} else if (!strcasecmp(iv_name, "plain64")) {
|
||||||
ctx->type = IV_PLAIN64;
|
ctx->type = IV_PLAIN64;
|
||||||
|
} else if (!strcasecmp(iv_name, "plain64be")) {
|
||||||
|
ctx->type = IV_PLAIN64BE;
|
||||||
} else if (!strcasecmp(iv_name, "plain")) {
|
} else if (!strcasecmp(iv_name, "plain")) {
|
||||||
ctx->type = IV_PLAIN;
|
ctx->type = IV_PLAIN;
|
||||||
} else if (!strncasecmp(iv_name, "essiv:", 6)) {
|
} else if (!strncasecmp(iv_name, "essiv:", 6)) {
|
||||||
@@ -151,6 +153,10 @@ static int crypt_sector_iv_generate(struct crypt_sector_iv *ctx, uint64_t sector
|
|||||||
memset(ctx->iv, 0, ctx->iv_size);
|
memset(ctx->iv, 0, ctx->iv_size);
|
||||||
*(uint64_t *)ctx->iv = cpu_to_le64(sector);
|
*(uint64_t *)ctx->iv = cpu_to_le64(sector);
|
||||||
break;
|
break;
|
||||||
|
case IV_PLAIN64BE:
|
||||||
|
memset(ctx->iv, 0, ctx->iv_size);
|
||||||
|
*(uint64_t *)&ctx->iv[ctx->iv_size - sizeof(uint64_t)] = cpu_to_be64(sector);
|
||||||
|
break;
|
||||||
case IV_ESSIV:
|
case IV_ESSIV:
|
||||||
memset(ctx->iv, 0, ctx->iv_size);
|
memset(ctx->iv, 0, ctx->iv_size);
|
||||||
*(uint64_t *)ctx->iv = cpu_to_le64(sector);
|
*(uint64_t *)ctx->iv = cpu_to_le64(sector);
|
||||||
|
|||||||
Reference in New Issue
Block a user