TCRYPT: move all header handling into library.

Add warning about unsupported modes.
This commit is contained in:
Milan Broz
2012-11-23 13:01:43 +01:00
parent 0996a43dbb
commit 52cbbdaf38
3 changed files with 37 additions and 10 deletions

View File

@@ -46,6 +46,10 @@ struct crypt_device {
int password_verify; int password_verify;
int rng_type; int rng_type;
// FIXME: switch to union
// FIXME: privatre binary headers and access it properly
// through sub-library (LUKS1, TCRYPT)
/* used in CRYPT_LUKS1 */ /* used in CRYPT_LUKS1 */
struct luks_phdr hdr; struct luks_phdr hdr;
uint64_t PBKDF2_per_sec; uint64_t PBKDF2_per_sec;
@@ -2426,11 +2430,8 @@ uint64_t crypt_get_data_offset(struct crypt_device *cd)
if (isLOOPAES(cd->type)) if (isLOOPAES(cd->type))
return cd->loopaes_hdr.offset; return cd->loopaes_hdr.offset;
if (isTCRYPT(cd->type)) { // FIXME: system vol. if (isTCRYPT(cd->type))
if (!cd->tcrypt_hdr.d.mk_offset) return TCRYPT_get_data_offset(&cd->tcrypt_hdr);
return 1;
return (cd->tcrypt_hdr.d.mk_offset / cd->tcrypt_hdr.d.sector_size);
}
return 0; return 0;
} }
@@ -2446,11 +2447,8 @@ uint64_t crypt_get_iv_offset(struct crypt_device *cd)
if (isLOOPAES(cd->type)) if (isLOOPAES(cd->type))
return cd->loopaes_hdr.skip; return cd->loopaes_hdr.skip;
if (isTCRYPT(cd->type)) { if (isTCRYPT(cd->type))
if (!cd->tcrypt_hdr.d.mk_offset) return TCRYPT_get_iv_offset(&cd->tcrypt_hdr);
return 0;
return (cd->tcrypt_hdr.d.mk_offset / cd->tcrypt_hdr.d.sector_size);
}
return 0; return 0;
} }

View File

@@ -519,6 +519,17 @@ int TCRYPT_activate(struct crypt_device *cd,
} }
}; };
if (!hdr->d.version) {
log_dbg("TCRYPT: this function is not supported without encrypted header load.");
return -ENOTSUP;
}
if (hdr->d.sector_size && hdr->d.sector_size != SECTOR_SIZE) {
log_err(cd, _("Activation is not supported for %d sector size.\n"),
hdr->d.sector_size);
return -ENOTSUP;
}
if (strstr(params->mode, "-tcrypt")) { if (strstr(params->mode, "-tcrypt")) {
log_err(cd, _("Kernel doesn't support activation for this TCRYPT legacy mode.\n")); log_err(cd, _("Kernel doesn't support activation for this TCRYPT legacy mode.\n"));
return -ENOTSUP; return -ENOTSUP;
@@ -698,3 +709,18 @@ int TCRYPT_init_by_name(struct crypt_device *cd, const char *name,
tcrypt_params->cipher = strdup(cipher); tcrypt_params->cipher = strdup(cipher);
return 0; return 0;
} }
uint64_t TCRYPT_get_data_offset(struct tcrypt_phdr *hdr)
{
// FIXME: system vol.
if (!hdr->d.mk_offset)
return 1;
return (hdr->d.mk_offset / hdr->d.sector_size);
}
uint64_t TCRYPT_get_iv_offset(struct tcrypt_phdr *hdr)
{
if (!hdr->d.mk_offset)
return 0;
return (hdr->d.mk_offset / hdr->d.sector_size);
}

View File

@@ -84,4 +84,7 @@ int TCRYPT_activate(struct crypt_device *cd,
int TCRYPT_deactivate(struct crypt_device *cd, int TCRYPT_deactivate(struct crypt_device *cd,
const char *name); const char *name);
uint64_t TCRYPT_get_data_offset(struct tcrypt_phdr *hdr);
uint64_t TCRYPT_get_iv_offset(struct tcrypt_phdr *hdr);
#endif #endif