small argument revamp
This commit is contained in:
parent
4169260830
commit
84a411c0c3
1 changed files with 15 additions and 19 deletions
|
@ -112,27 +112,26 @@ static const struct grub_arg_option options[] =
|
||||||
};
|
};
|
||||||
|
|
||||||
static gcry_err_code_t
|
static gcry_err_code_t
|
||||||
luks_decrypt (grub_crypto_cipher_handle_t cipher, luks_mode_t mode,
|
luks_decrypt (const struct grub_luks *dev,
|
||||||
grub_uint8_t * data, grub_size_t len,
|
grub_uint8_t * data, grub_size_t len, grub_size_t sector)
|
||||||
grub_size_t sector, grub_crypto_cipher_handle_t essiv_cipher)
|
|
||||||
{
|
{
|
||||||
grub_size_t i;
|
grub_size_t i;
|
||||||
gcry_err_code_t err;
|
gcry_err_code_t err;
|
||||||
|
|
||||||
switch (mode)
|
switch (dev->mode)
|
||||||
{
|
{
|
||||||
case GRUB_LUKS_MODE_ECB:
|
case GRUB_LUKS_MODE_ECB:
|
||||||
return grub_crypto_ecb_decrypt (cipher, data, data, len);
|
return grub_crypto_ecb_decrypt (dev->cipher, data, data, len);
|
||||||
|
|
||||||
case GRUB_LUKS_MODE_CBC_PLAIN:
|
case GRUB_LUKS_MODE_CBC_PLAIN:
|
||||||
for (i = 0; i < len; i += GRUB_DISK_SECTOR_SIZE)
|
for (i = 0; i < len; i += GRUB_DISK_SECTOR_SIZE)
|
||||||
{
|
{
|
||||||
grub_uint32_t iv[(cipher->cipher->blocksize
|
grub_uint32_t iv[(dev->cipher->cipher->blocksize
|
||||||
+ sizeof (grub_uint32_t) - 1)
|
+ sizeof (grub_uint32_t) - 1)
|
||||||
/ sizeof (grub_uint32_t)];
|
/ sizeof (grub_uint32_t)];
|
||||||
grub_memset (iv, 0, cipher->cipher->blocksize);
|
grub_memset (iv, 0, dev->cipher->cipher->blocksize);
|
||||||
iv[0] = grub_cpu_to_le32 (sector & 0xFFFFFFFF);
|
iv[0] = grub_cpu_to_le32 (sector & 0xFFFFFFFF);
|
||||||
err = grub_crypto_cbc_decrypt (cipher, data + i, data + i,
|
err = grub_crypto_cbc_decrypt (dev->cipher, data + i, data + i,
|
||||||
GRUB_DISK_SECTOR_SIZE, iv);
|
GRUB_DISK_SECTOR_SIZE, iv);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
@ -143,17 +142,17 @@ luks_decrypt (grub_crypto_cipher_handle_t cipher, luks_mode_t mode,
|
||||||
case GRUB_LUKS_MODE_CBC_ESSIV:
|
case GRUB_LUKS_MODE_CBC_ESSIV:
|
||||||
for (i = 0; i < len; i += GRUB_DISK_SECTOR_SIZE)
|
for (i = 0; i < len; i += GRUB_DISK_SECTOR_SIZE)
|
||||||
{
|
{
|
||||||
grub_uint32_t iv[(cipher->cipher->blocksize
|
grub_uint32_t iv[(dev->cipher->cipher->blocksize
|
||||||
+ sizeof (grub_uint32_t) - 1)
|
+ sizeof (grub_uint32_t) - 1)
|
||||||
/ sizeof (grub_uint32_t)];
|
/ sizeof (grub_uint32_t)];
|
||||||
grub_memset (iv, 0, cipher->cipher->blocksize);
|
grub_memset (iv, 0, dev->cipher->cipher->blocksize);
|
||||||
iv[0] = grub_cpu_to_le32 (sector & 0xFFFFFFFF);
|
iv[0] = grub_cpu_to_le32 (sector & 0xFFFFFFFF);
|
||||||
err =
|
err =
|
||||||
grub_crypto_ecb_encrypt (essiv_cipher, iv, iv,
|
grub_crypto_ecb_encrypt (dev->essiv_cipher, iv, iv,
|
||||||
cipher->cipher->blocksize);
|
dev->cipher->cipher->blocksize);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
err = grub_crypto_cbc_decrypt (cipher, data + i, data + i,
|
err = grub_crypto_cbc_decrypt (dev->cipher, data + i, data + i,
|
||||||
GRUB_DISK_SECTOR_SIZE, iv);
|
GRUB_DISK_SECTOR_SIZE, iv);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
@ -398,8 +397,7 @@ luks_recover_key (grub_luks_t dev, const struct grub_luks_phdr *header,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
gcry_err = luks_decrypt (dev->cipher, dev->mode, split_key,
|
gcry_err = luks_decrypt (dev, split_key, length, 0);
|
||||||
length, 0, dev->essiv_cipher);
|
|
||||||
if (gcry_err)
|
if (gcry_err)
|
||||||
{
|
{
|
||||||
grub_free (hashed_key);
|
grub_free (hashed_key);
|
||||||
|
@ -729,11 +727,9 @@ grub_luks_read (grub_disk_t disk, grub_disk_addr_t sector,
|
||||||
grub_dprintf ("luks", "grub_disk_read failed with error %d\n", err);
|
grub_dprintf ("luks", "grub_disk_read failed with error %d\n", err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
return grub_crypto_gcry_error (luks_decrypt (dev->cipher,
|
return grub_crypto_gcry_error (luks_decrypt (dev, (grub_uint8_t *) buf,
|
||||||
dev->mode,
|
|
||||||
(grub_uint8_t *) buf,
|
|
||||||
size << GRUB_DISK_SECTOR_BITS,
|
size << GRUB_DISK_SECTOR_BITS,
|
||||||
sector, dev->essiv_cipher));
|
sector));
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
|
|
Loading…
Add table
Reference in a new issue