diff --git a/docs/spec/blocks/ddt2.adoc b/docs/spec/blocks/ddt2.adoc
index 44d642a..66b2ce1 100644
--- a/docs/spec/blocks/ddt2.adoc
+++ b/docs/spec/blocks/ddt2.adoc
@@ -4,7 +4,47 @@ The deduplication table is a multi-level table of pointers to LBAs contained in
It starts with the following header.
[source,c]
-/* Undefined */
+typedef struct DdtHeader2
+{
+ /**Identifier, */
+ uint32_t identifier;
+ /**Type of data pointed by this DDT */
+ uint16_t type;
+ /**Compression algorithm used to compress the DDT */
+ uint16_t compression;
+ /**How many levels of subtables are present */
+ uint8_t levels;
+ /**Which level this table belongs to */
+ uint8_t tableLevel;
+ /**Pointer to absolute byte offset in file where the previous level table is located */
+ uint64_t previousLevelOffset;
+ /**Negative displacement of LBAs */
+ uint16_t negative;
+ /**Number of blocks in media */
+ uint64_t blocks;
+ /**Positive overflow displacement of LBAs */
+ uint16_t overflow;
+ /**First LBA contained in this table */
+ uint64_t start;
+ /**Block alignment boundaries */
+ uint8_t blockAlignmentShift;
+ /**Data shift */
+ uint8_t dataShift;
+ /**Table shift */
+ uint8_t tableShift;
+ /**Size type */
+ uint8_t sizeType;
+ /**Entries in this table */
+ uint64_t entries;
+ /**Compressed length for the DDT */
+ uint64_t cmpLength;
+ /**Uncompressed length for the DDT */
+ uint64_t length;
+ /**CRC64-ECMA of the compressed DDT */
+ uint64_t cmpCrc64;
+ /**CRC64-ECMA of the uncompressed DDT */
+ uint64_t crc64;
+} DdtHeader2;
==== Field Descriptions
diff --git a/include/aaruformat/enums.h b/include/aaruformat/enums.h
index 606e8f8..9f746fa 100644
--- a/include/aaruformat/enums.h
+++ b/include/aaruformat/enums.h
@@ -206,6 +206,8 @@ typedef enum
DataBlock = 0x4B4C4244,
/** Block containing a deduplication table */
DeDuplicationTable = 0x2A544444,
+ /** Block containing a deduplication table v2 */
+ DeDuplicationTable2 = 0x32544444,
/** Block containing the index */
IndexBlock = 0x58444E49,
/** Block containing the index v2 */
diff --git a/include/aaruformat/structs/ddt.h b/include/aaruformat/structs/ddt.h
index a0bf253..3c5c8b0 100644
--- a/include/aaruformat/structs/ddt.h
+++ b/include/aaruformat/structs/ddt.h
@@ -22,7 +22,8 @@
#pragma pack(push, 1)
/**Header for a deduplication table. Table follows it */
-typedef struct DdtHeader {
+typedef struct DdtHeader
+{
/**Identifier, */
uint32_t identifier;
/**Type of data pointed by this DDT */
@@ -30,7 +31,7 @@ typedef struct DdtHeader {
/**Compression algorithm used to compress the DDT */
uint16_t compression;
/**Each entry is ((uint8_t offset in file) << shift) + (sector offset in block) */
- uint8_t shift;
+ uint8_t shift;
/**How many entries are in the table */
uint64_t entries;
/**Compressed length for the DDT */
@@ -43,6 +44,48 @@ typedef struct DdtHeader {
uint64_t crc64;
} DdtHeader;
+typedef struct DdtHeader2
+{
+ /**Identifier, */
+ uint32_t identifier;
+ /**Type of data pointed by this DDT */
+ uint16_t type;
+ /**Compression algorithm used to compress the DDT */
+ uint16_t compression;
+ /**How many levels of subtables are present */
+ uint8_t levels;
+ /**Which level this table belongs to */
+ uint8_t tableLevel;
+ /**Pointer to absolute byte offset in file where the previous level table is located */
+ uint64_t previousLevelOffset;
+ /**Negative displacement of LBAs */
+ uint16_t negative;
+ /**Number of blocks in media */
+ uint64_t blocks;
+ /**Positive overflow displacement of LBAs */
+ uint16_t overflow;
+ /**First LBA contained in this table */
+ uint64_t start;
+ /**Block alignment boundaries */
+ uint8_t blockAlignmentShift;
+ /**Data shift */
+ uint8_t dataShift;
+ /**Table shift */
+ uint8_t tableShift;
+ /**Size type */
+ uint8_t sizeType;
+ /**Entries in this table */
+ uint64_t entries;
+ /**Compressed length for the DDT */
+ uint64_t cmpLength;
+ /**Uncompressed length for the DDT */
+ uint64_t length;
+ /**CRC64-ECMA of the compressed DDT */
+ uint64_t cmpCrc64;
+ /**CRC64-ECMA of the uncompressed DDT */
+ uint64_t crc64;
+} DdtHeader2;
+
#pragma pack(pop)
-#endif //LIBAARUFORMAT_DDT_H
+#endif // LIBAARUFORMAT_DDT_H