mirror of
https://gitlab.com/cryptsetup/cryptsetup.git
synced 2025-12-12 11:20:10 +01:00
Move LUKS2 metadata size api tests in separate routine.
This commit is contained in:
@@ -606,7 +606,6 @@ static void AddDeviceLuks2(void)
|
||||
const char *cipher = "aes";
|
||||
const char *cipher_mode = "cbc-essiv:sha256";
|
||||
uint64_t r_payload_offset, r_header_size, r_size_1;
|
||||
uint64_t mdata_size, keyslots_size;
|
||||
|
||||
/* Cannot use Argon2 in FIPS */
|
||||
if (_fips_mode) {
|
||||
@@ -623,46 +622,6 @@ static void AddDeviceLuks2(void)
|
||||
OK_(create_dmdevice_over_loop(H_DEVICE, r_header_size));
|
||||
OK_(create_dmdevice_over_loop(H_DEVICE_WRONG, r_header_size - 1));
|
||||
|
||||
//default metadata sizes
|
||||
OK_(crypt_init(&cd, DMDIR H_DEVICE));
|
||||
OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size));
|
||||
EQ_(mdata_size, 0);
|
||||
EQ_(keyslots_size, 0);
|
||||
OK_(crypt_set_metadata_size(cd, 0, 0));
|
||||
OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size));
|
||||
EQ_(mdata_size, 0);
|
||||
EQ_(keyslots_size, 0);
|
||||
OK_(crypt_set_metadata_size(cd, 0x004000, 0x004000));
|
||||
OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size));
|
||||
EQ_(mdata_size, 0x004000);
|
||||
EQ_(keyslots_size, 0x004000);
|
||||
OK_(crypt_set_metadata_size(cd, 0x008000, 0x008000));
|
||||
OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size));
|
||||
EQ_(mdata_size, 0x008000);
|
||||
EQ_(keyslots_size, 0x008000);
|
||||
FAIL_(crypt_set_metadata_size(cd, 0x008001, 0x008000), "Wrong size");
|
||||
FAIL_(crypt_set_metadata_size(cd, 0x008000, 0x008001), "Wrong size");
|
||||
crypt_free(cd);
|
||||
|
||||
// metadata settings
|
||||
OK_(crypt_init(&cd, DMDIR H_DEVICE));
|
||||
OK_(crypt_set_metadata_size(cd, 0x080000, 0x080000));
|
||||
OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms));
|
||||
EQ_(crypt_keyslot_add_by_volume_key(cd, 7, key, key_size, passphrase, strlen(passphrase)), 7);
|
||||
crypt_free(cd);
|
||||
OK_(crypt_init(&cd, DMDIR H_DEVICE));
|
||||
OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
|
||||
OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size));
|
||||
EQ_(mdata_size, 0x080000);
|
||||
EQ_(keyslots_size, 0x080000);
|
||||
crypt_free(cd);
|
||||
// default
|
||||
OK_(crypt_init(&cd, DMDIR H_DEVICE));
|
||||
OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms));
|
||||
OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size));
|
||||
EQ_(mdata_size, 0x04000);
|
||||
EQ_(keyslots_size, (r_header_size * 512) - 2 * 0x04000);
|
||||
crypt_free(cd);
|
||||
|
||||
// format
|
||||
OK_(crypt_init(&cd, DMDIR H_DEVICE_WRONG));
|
||||
@@ -948,6 +907,89 @@ static void AddDeviceLuks2(void)
|
||||
_cleanup_dmdevices();
|
||||
}
|
||||
|
||||
static void Luks2MetadataSize(void)
|
||||
{
|
||||
struct crypt_device *cd;
|
||||
struct crypt_pbkdf_type pbkdf = {
|
||||
.type = CRYPT_KDF_ARGON2I,
|
||||
.hash = "sha256",
|
||||
.parallel_threads = 1,
|
||||
.max_memory_kb = 128,
|
||||
.iterations = 4,
|
||||
.flags = CRYPT_PBKDF_NO_BENCHMARK
|
||||
};
|
||||
struct crypt_params_luks2 params = {
|
||||
.pbkdf = &pbkdf,
|
||||
.data_device = DEVICE_2,
|
||||
.sector_size = 512
|
||||
};
|
||||
char key[128];
|
||||
|
||||
const char *passphrase = "blabla";
|
||||
const char *mk_hex = "bb21158c733229347bd4e681891e213d94c685be6a5b84818afe7a78a6de7a1a";
|
||||
size_t key_size = strlen(mk_hex) / 2;
|
||||
const char *cipher = "aes";
|
||||
const char *cipher_mode = "cbc-essiv:sha256";
|
||||
uint64_t r_header_size;
|
||||
uint64_t mdata_size, keyslots_size;
|
||||
|
||||
/* Cannot use Argon2 in FIPS */
|
||||
if (_fips_mode) {
|
||||
pbkdf.type = CRYPT_KDF_PBKDF2;
|
||||
pbkdf.parallel_threads = 0;
|
||||
pbkdf.max_memory_kb = 0;
|
||||
pbkdf.iterations = 1000;
|
||||
}
|
||||
|
||||
crypt_decode_key(key, mk_hex, key_size);
|
||||
|
||||
// init test devices
|
||||
OK_(get_luks2_offsets(1, 0, 0, &r_header_size, NULL));
|
||||
OK_(create_dmdevice_over_loop(H_DEVICE, r_header_size));
|
||||
//default metadata sizes
|
||||
OK_(crypt_init(&cd, DMDIR H_DEVICE));
|
||||
OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size));
|
||||
EQ_(mdata_size, 0);
|
||||
EQ_(keyslots_size, 0);
|
||||
OK_(crypt_set_metadata_size(cd, 0, 0));
|
||||
OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size));
|
||||
EQ_(mdata_size, 0);
|
||||
EQ_(keyslots_size, 0);
|
||||
OK_(crypt_set_metadata_size(cd, 0x004000, 0x004000));
|
||||
OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size));
|
||||
EQ_(mdata_size, 0x004000);
|
||||
EQ_(keyslots_size, 0x004000);
|
||||
OK_(crypt_set_metadata_size(cd, 0x008000, 0x008000));
|
||||
OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size));
|
||||
EQ_(mdata_size, 0x008000);
|
||||
EQ_(keyslots_size, 0x008000);
|
||||
FAIL_(crypt_set_metadata_size(cd, 0x008001, 0x008000), "Wrong size");
|
||||
FAIL_(crypt_set_metadata_size(cd, 0x008000, 0x008001), "Wrong size");
|
||||
crypt_free(cd);
|
||||
|
||||
// metadata settings
|
||||
OK_(crypt_init(&cd, DMDIR H_DEVICE));
|
||||
OK_(crypt_set_metadata_size(cd, 0x080000, 0x080000));
|
||||
OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms));
|
||||
EQ_(crypt_keyslot_add_by_volume_key(cd, 7, key, key_size, passphrase, strlen(passphrase)), 7);
|
||||
crypt_free(cd);
|
||||
OK_(crypt_init(&cd, DMDIR H_DEVICE));
|
||||
OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
|
||||
OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size));
|
||||
EQ_(mdata_size, 0x080000);
|
||||
EQ_(keyslots_size, 0x080000);
|
||||
crypt_free(cd);
|
||||
// default
|
||||
OK_(crypt_init(&cd, DMDIR H_DEVICE));
|
||||
OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, ¶ms));
|
||||
OK_(crypt_get_metadata_size(cd, &mdata_size, &keyslots_size));
|
||||
EQ_(mdata_size, 0x04000);
|
||||
EQ_(keyslots_size, (r_header_size * 512) - 2 * 0x04000);
|
||||
crypt_free(cd);
|
||||
|
||||
_cleanup_dmdevices();
|
||||
}
|
||||
|
||||
static void UseTempVolumes(void)
|
||||
{
|
||||
struct crypt_device *cd;
|
||||
@@ -3594,6 +3636,7 @@ int main(int argc, char *argv[])
|
||||
crypt_set_debug_level(_debug ? CRYPT_DEBUG_JSON : CRYPT_DEBUG_NONE);
|
||||
|
||||
RUN_(AddDeviceLuks2, "Format and use LUKS2 device");
|
||||
RUN_(Luks2MetadataSize, "LUKS2 metadata settings");
|
||||
RUN_(Luks2HeaderLoad, "LUKS2 header load");
|
||||
RUN_(Luks2HeaderRestore, "LUKS2 header restore");
|
||||
RUN_(Luks2HeaderBackup, "LUKS2 header backup");
|
||||
|
||||
Reference in New Issue
Block a user