disk/cryptodisk: Add --hw-accel to enable hardware acceleration
The --hw-accel option has been added to cryptomount to speed up decryption by temporarily enabling hardware-specific instruction sets (e.g., AVX, SSE) in libgcrypt. A new feature, "feature_gcry_hw_accel", is also introduced to mark the availability of the new option. Signed-off-by: Gary Lin <glin@suse.com> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
parent
f8f68f14ae
commit
91ddada642
@ -7134,7 +7134,7 @@ The option @option{--quiet} can be given to suppress the output.
|
|||||||
@node cryptomount
|
@node cryptomount
|
||||||
@subsection cryptomount
|
@subsection cryptomount
|
||||||
|
|
||||||
@deffn Command cryptomount [ [@option{-p} password] | [@option{-k} keyfile [@option{-O} keyoffset] [@option{-S} keysize] ] | [@option{-P} protector] ] [@option{-H} file] device|@option{-u} uuid|@option{-a}|@option{-b}
|
@deffn Command cryptomount [ [@option{-p} password] | [@option{-k} keyfile [@option{-O} keyoffset] [@option{-S} keysize] ] | [@option{-P} protector] | [@option{-A}] ] [@option{-H} file] device|@option{-u} uuid|@option{-a}|@option{-b}
|
||||||
Setup access to encrypted device. A passphrase will be requested interactively,
|
Setup access to encrypted device. A passphrase will be requested interactively,
|
||||||
if neither the @option{-p} nor @option{-k} options are given. The option
|
if neither the @option{-p} nor @option{-k} options are given. The option
|
||||||
@option{-p} can be used to supply a passphrase (useful for scripts).
|
@option{-p} can be used to supply a passphrase (useful for scripts).
|
||||||
@ -7142,7 +7142,8 @@ Alternatively the @option{-k} option can be used to supply a keyfile with
|
|||||||
options @option{-O} and @option{-S} optionally supplying the offset and size,
|
options @option{-O} and @option{-S} optionally supplying the offset and size,
|
||||||
respectively, of the key data in the given key file. Besides the keyfile,
|
respectively, of the key data in the given key file. Besides the keyfile,
|
||||||
the key can be stored in a key protector, and option @option{-P} configures
|
the key can be stored in a key protector, and option @option{-P} configures
|
||||||
specific key protector, e.g. tpm2, to retrieve the key from.
|
specific key protector, e.g. tpm2, to retrieve the key from. The option @option{-A}
|
||||||
|
enables hardware acceleration in libgcrypt to speed up decryption.
|
||||||
The @option{-H} options can be used to supply cryptomount backends with an
|
The @option{-H} options can be used to supply cryptomount backends with an
|
||||||
alternative header file (aka detached header). Not all backends have headers
|
alternative header file (aka detached header). Not all backends have headers
|
||||||
nor support alternative header files (currently only LUKS1 and LUKS2 support them).
|
nor support alternative header files (currently only LUKS1 and LUKS2 support them).
|
||||||
|
|||||||
@ -29,6 +29,7 @@
|
|||||||
#include <grub/partition.h>
|
#include <grub/partition.h>
|
||||||
#include <grub/key_protector.h>
|
#include <grub/key_protector.h>
|
||||||
#include <grub/safemath.h>
|
#include <grub/safemath.h>
|
||||||
|
#include <grub/hwfeatures-gcry.h>
|
||||||
|
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
#include <grub/emu/hostdisk.h>
|
#include <grub/emu/hostdisk.h>
|
||||||
@ -48,7 +49,8 @@ enum
|
|||||||
OPTION_KEYFILE_OFFSET,
|
OPTION_KEYFILE_OFFSET,
|
||||||
OPTION_KEYFILE_SIZE,
|
OPTION_KEYFILE_SIZE,
|
||||||
OPTION_HEADER,
|
OPTION_HEADER,
|
||||||
OPTION_PROTECTOR
|
OPTION_PROTECTOR,
|
||||||
|
OPTION_HWACCEL
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct grub_arg_option options[] =
|
static const struct grub_arg_option options[] =
|
||||||
@ -64,6 +66,7 @@ static const struct grub_arg_option options[] =
|
|||||||
{"header", 'H', 0, N_("Read header from file"), 0, ARG_TYPE_STRING},
|
{"header", 'H', 0, N_("Read header from file"), 0, ARG_TYPE_STRING},
|
||||||
{"protector", 'P', GRUB_ARG_OPTION_REPEATABLE,
|
{"protector", 'P', GRUB_ARG_OPTION_REPEATABLE,
|
||||||
N_("Unlock volume(s) using key protector(s)."), 0, ARG_TYPE_STRING},
|
N_("Unlock volume(s) using key protector(s)."), 0, ARG_TYPE_STRING},
|
||||||
|
{"hw-accel", 'A', 0, N_("Enable hardware acceleration."), 0, 0},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1420,7 +1423,7 @@ grub_cryptodisk_clear_key_cache (struct grub_cryptomount_args *cargs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args)
|
__grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
struct grub_arg_list *state = ctxt->state;
|
struct grub_arg_list *state = ctxt->state;
|
||||||
struct grub_cryptomount_args cargs = {0};
|
struct grub_cryptomount_args cargs = {0};
|
||||||
@ -1629,6 +1632,23 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
|
{
|
||||||
|
struct grub_arg_list *state = ctxt->state;
|
||||||
|
grub_err_t err;
|
||||||
|
|
||||||
|
if (state[OPTION_HWACCEL].set)
|
||||||
|
grub_enable_gcry_hwf ();
|
||||||
|
|
||||||
|
err = __grub_cmd_cryptomount (ctxt, argc, args);
|
||||||
|
|
||||||
|
if (state[OPTION_HWACCEL].set)
|
||||||
|
grub_reset_gcry_hwf ();
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
static struct grub_disk_dev grub_cryptodisk_dev = {
|
static struct grub_disk_dev grub_cryptodisk_dev = {
|
||||||
.name = "cryptodisk",
|
.name = "cryptodisk",
|
||||||
.id = GRUB_DISK_DEVICE_CRYPTODISK_ID,
|
.id = GRUB_DISK_DEVICE_CRYPTODISK_ID,
|
||||||
@ -1898,7 +1918,7 @@ GRUB_MOD_INIT (cryptodisk)
|
|||||||
cmd = grub_register_extcmd ("cryptomount", grub_cmd_cryptomount, 0,
|
cmd = grub_register_extcmd ("cryptomount", grub_cmd_cryptomount, 0,
|
||||||
N_("[ [-p password] | [-k keyfile"
|
N_("[ [-p password] | [-k keyfile"
|
||||||
" [-O keyoffset] [-S keysize] ] ] [-H file]"
|
" [-O keyoffset] [-S keysize] ] ] [-H file]"
|
||||||
" [-P protector [-P protector ...]]"
|
" [-P protector [-P protector ...]] | [-A]"
|
||||||
" <SOURCE|-u UUID|-a|-b>"),
|
" <SOURCE|-u UUID|-a|-b>"),
|
||||||
N_("Mount a crypto device."), options);
|
N_("Mount a crypto device."), options);
|
||||||
grub_procfs_register ("luks_script", &luks_script);
|
grub_procfs_register ("luks_script", &luks_script);
|
||||||
|
|||||||
@ -518,7 +518,8 @@ static const char *features[] = {
|
|||||||
"feature_default_font_path", "feature_all_video_module",
|
"feature_default_font_path", "feature_all_video_module",
|
||||||
"feature_menuentry_id", "feature_menuentry_options", "feature_200_final",
|
"feature_menuentry_id", "feature_menuentry_options", "feature_200_final",
|
||||||
"feature_nativedisk_cmd", "feature_timeout_style",
|
"feature_nativedisk_cmd", "feature_timeout_style",
|
||||||
"feature_search_cryptodisk_only", "feature_tpm2_cap_pcrs"
|
"feature_search_cryptodisk_only", "feature_tpm2_cap_pcrs",
|
||||||
|
"feature_gcry_hw_accel"
|
||||||
};
|
};
|
||||||
|
|
||||||
GRUB_MOD_INIT(normal)
|
GRUB_MOD_INIT(normal)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user