X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=extras%2Fvolume_id%2Fvolume_id%2Fluks.c;h=22d2a94ac78a2ee38ce51bca2a8665b4aa423043;hb=b5d88a0cfe49ca34db713b42ea031857395debc4;hp=20016927316257fd7eb813c16561266e11323322;hpb=e4d4a557e53c3fbcf14bd1bb29686fd884905b53;p=elogind.git diff --git a/extras/volume_id/volume_id/luks.c b/extras/volume_id/volume_id/luks.c index 200169273..22d2a94ac 100644 --- a/extras/volume_id/volume_id/luks.c +++ b/extras/volume_id/volume_id/luks.c @@ -26,72 +26,59 @@ # include #endif -#include #include #include #include #include #include #include -#include #include "volume_id.h" #include "util.h" #include "logging.h" #include "luks.h" -/* from cryptsetup-luks internal.h */ -#define SECTOR_SHIFT 9 -#define SECTOR_SIZE (1 << SECTOR_SHIFT) +#define SECTOR_SHIFT 9 +#define SECTOR_SIZE (1 << SECTOR_SHIFT) -/* from cryptsetup-luks luks.h */ -#define LUKS_CIPHERNAME_L 32 -#define LUKS_CIPHERMODE_L 32 -#define LUKS_HASHSPEC_L 32 -#define LUKS_DIGESTSIZE 20 /* since SHA1 */ -#define LUKS_SALTSIZE 32 -#define LUKS_NUMKEYS 8 +#define LUKS_CIPHERNAME_L 32 +#define LUKS_CIPHERMODE_L 32 +#define LUKS_HASHSPEC_L 32 +#define LUKS_DIGESTSIZE 20 +#define LUKS_SALTSIZE 32 +#define LUKS_NUMKEYS 8 -/* from cryptsetup-luks luks.h */ -const unsigned char LUKS_MAGIC[] = {'L','U','K','S', 0xba, 0xbe}; +const uint8_t LUKS_MAGIC[] = {'L','U','K','S', 0xba, 0xbe}; #define LUKS_MAGIC_L 6 - -/* from cryptsetup-luks luks.h */ #define LUKS_PHDR_SIZE (sizeof(struct luks_phdr)/SECTOR_SIZE+1) - -/* from cryptsetup-luks luks.h */ #define UUID_STRING_L 40 -int volume_id_probe_luks(struct volume_id *id, __u64 off) +struct luks_phdr { + uint8_t magic[LUKS_MAGIC_L]; + uint16_t version; + uint8_t cipherName[LUKS_CIPHERNAME_L]; + uint8_t cipherMode[LUKS_CIPHERMODE_L]; + uint8_t hashSpec[LUKS_HASHSPEC_L]; + uint32_t payloadOffset; + uint32_t keyBytes; + uint8_t mkDigest[LUKS_DIGESTSIZE]; + uint8_t mkDigestSalt[LUKS_SALTSIZE]; + uint32_t mkDigestIterations; + uint8_t uuid[UUID_STRING_L]; + struct { + uint32_t active; + uint32_t passwordIterations; + uint8_t passwordSalt[LUKS_SALTSIZE]; + uint32_t keyMaterialOffset; + uint32_t stripes; + } keyblock[LUKS_NUMKEYS]; +}; + +int volume_id_probe_luks(struct volume_id *id, uint64_t off) { - /* from cryptsetup-luks luks.h */ - struct luks_phdr { - char magic[LUKS_MAGIC_L]; - uint16_t version; - char cipherName[LUKS_CIPHERNAME_L]; - char cipherMode[LUKS_CIPHERMODE_L]; - char hashSpec[LUKS_HASHSPEC_L]; - uint32_t payloadOffset; - uint32_t keyBytes; - char mkDigest[LUKS_DIGESTSIZE]; - char mkDigestSalt[LUKS_SALTSIZE]; - uint32_t mkDigestIterations; - char uuid[UUID_STRING_L]; - struct { - uint32_t active; - - /* parameters used for password processing */ - uint32_t passwordIterations; - char passwordSalt[LUKS_SALTSIZE]; - - /* parameters used for AF store/load */ - uint32_t keyMaterialOffset; - uint32_t stripes; - } keyblock[LUKS_NUMKEYS]; - } *header; + struct luks_phdr *header; header = (struct luks_phdr*) volume_id_get_buffer(id, off, LUKS_PHDR_SIZE); - if (header == NULL) return -1; @@ -99,7 +86,8 @@ int volume_id_probe_luks(struct volume_id *id, __u64 off) return -1; volume_id_set_usage(id, VOLUME_ID_CRYPTO); - volume_id_set_uuid(id, header->uuid, UUID_DCE); + volume_id_set_uuid(id, header->uuid, UUID_DCE_STRING); + id->type = "crypto_LUKS"; return 0;