Fix crypt_get_volume_key_size() for plain device.

git-svn-id: https://cryptsetup.googlecode.com/svn/trunk@665 36d66b0a-2a48-0410-832c-cd162a569da5
This commit is contained in:
Milan Broz
2011-10-27 20:40:16 +00:00
parent c490ef638b
commit 6e119ab6cc
3 changed files with 16 additions and 6 deletions

View File

@@ -1,3 +1,6 @@
2011-10-27 Milan Broz <mbroz@redhat.com>
* Fix crypt_get_volume_key_size() for plain device.
2011-10-25 Milan Broz <mbroz@redhat.com>
* Print informative message in isLuks only in verbose mode.
* Version 1.4.0.

View File

@@ -56,6 +56,7 @@ struct crypt_device {
char *plain_cipher;
char *plain_cipher_mode;
char *plain_uuid;
unsigned int plain_key_size;
/* used in CRYPT_LOOPAES */
struct crypt_params_loopaes loopaes_hdr;
@@ -677,6 +678,7 @@ int crypt_init_by_name_and_header(struct crypt_device **cd,
(*cd)->plain_hdr.hash = NULL; /* no way to get this */
(*cd)->plain_hdr.offset = dmd.offset;
(*cd)->plain_hdr.skip = dmd.iv_offset;
(*cd)->plain_key_size = dmd.vk->keylength;
r = crypt_parse_name_and_mode(dmd.cipher, cipher, NULL, cipher_mode);
if (!r) {
@@ -754,6 +756,7 @@ static int _crypt_format_plain(struct crypt_device *cd,
return -EINVAL;
}
cd->plain_key_size = volume_key_size;
cd->volume_key = crypt_alloc_volume_key(volume_key_size, NULL);
if (!cd->volume_key)
return -ENOMEM;
@@ -1516,7 +1519,7 @@ int crypt_activate_by_passphrase(struct crypt_device *cd,
}
r = process_key(cd, cd->plain_hdr.hash,
cd->volume_key->keylength,
cd->plain_key_size,
passphrase, passphrase_size, &vk);
if (r < 0)
goto out;
@@ -1586,7 +1589,7 @@ int crypt_activate_by_keyfile(struct crypt_device *cd,
goto out;
r = process_key(cd, cd->plain_hdr.hash,
cd->volume_key->keylength,
cd->plain_key_size,
passphrase_read, passphrase_size_read, &vk);
if (r < 0)
goto out;
@@ -1658,8 +1661,7 @@ int crypt_activate_by_volume_key(struct crypt_device *cd,
if (!name)
return -EINVAL;
if (!volume_key || !volume_key_size || !cd->volume_key ||
volume_key_size != cd->volume_key->keylength) {
if (!volume_key || !volume_key_size || volume_key_size != cd->plain_key_size) {
log_err(cd, _("Incorrect volume key specified for plain device.\n"));
return -EINVAL;
}
@@ -1976,8 +1978,8 @@ const char *crypt_get_device_name(struct crypt_device *cd)
int crypt_get_volume_key_size(struct crypt_device *cd)
{
if (isPLAIN(cd->type) && cd->volume_key)
return cd->volume_key->keylength;
if (isPLAIN(cd->type))
return cd->plain_key_size;
if (isLUKS(cd->type))
return cd->hdr.keyBytes;

View File

@@ -660,6 +660,11 @@ static void AddDevicePlain(void)
FAIL_(crypt_init_by_name_and_header(&cd, CDEVICE_1, H_DEVICE),"can't init plain device by header device");
OK_(crypt_init_by_name(&cd, CDEVICE_1));
OK_(strcmp(cipher_mode,crypt_get_cipher_mode(cd)));
OK_(strcmp(cipher,crypt_get_cipher(cd)));
EQ_((int)key_size, crypt_get_volume_key_size(cd));
EQ_(params.skip, crypt_get_iv_offset(cd));
EQ_(params.offset, crypt_get_data_offset(cd));
OK_(crypt_deactivate(cd, CDEVICE_1));
crypt_free(cd);