mirror of
https://github.com/aaru-dps/libaaruformat.git
synced 2025-12-16 19:24:40 +00:00
106 lines
2.1 KiB
Plaintext
106 lines
2.1 KiB
Plaintext
=== Checksum Block (`CKSM`)
|
|
|
|
This block stores an array of checksums corresponding to the user data embedded in the image.
|
|
For media formats such as CompactDisc, the checksum is calculated over the complete sector—comprising the prefix, user data, and suffix—totaling 2352 bytes.
|
|
|
|
If the image is modified, the checksum block is considered outdated and should be either removed or excluded from the most recent index to ensure integrity.
|
|
|
|
==== Structure Definition
|
|
|
|
[source,c]
|
|
#define CHECKSUM_MAGIC 0x4D534B43
|
|
/**
|
|
* Checksum block, contains a checksum of all user data sectors (except for optical discs that is 2352 uint8_ts raw
|
|
* sector if available
|
|
* */
|
|
typedef struct ChecksumHeader
|
|
{
|
|
uint32_t identifier; ///< Block identifier, must be BlockType::ChecksumBlock.
|
|
uint32_t length; ///< Length in bytes of the payload (all entries + their digest data, excluding this header).
|
|
uint8_t entries; ///< Number of checksum entries that follow in the payload.
|
|
} ChecksumHeader;
|
|
|
|
==== Field Descriptions
|
|
|
|
[cols="2,2,2,6",options="header"]
|
|
|===
|
|
|Type
|
|
|Size
|
|
|Name
|
|
|Description
|
|
|
|
|uint32_t
|
|
|4 bytes
|
|
|identifier
|
|
|The tracks block identifier, always `CKSM`
|
|
|
|
|uint32_t
|
|
|4 bytes
|
|
|length
|
|
|The length in bytes of the data following this header.
|
|
|
|
|uint8_t
|
|
|1 byte
|
|
|entries
|
|
|The number of entries following this header
|
|
|===
|
|
|
|
==== Checksum entries
|
|
|
|
[source,c]
|
|
/**Checksum entry, followed by checksum data itself */
|
|
typedef struct ChecksumEntry
|
|
{
|
|
uint8_t type; ///< Algorithm used (value from \ref ChecksumAlgorithm).
|
|
uint32_t length; ///< Length in bytes of the digest that immediately follows this structure.
|
|
} ChecksumEntry;
|
|
|
|
==== Field Descriptions
|
|
|
|
[cols="2,2,2,6",options="header"]
|
|
|===
|
|
|Type
|
|
|Size
|
|
|Name
|
|
|Description
|
|
|
|
|uint8_t
|
|
|1 byte
|
|
|type
|
|
|Checksum algorithm.
|
|
|
|
|uint32_t
|
|
|4 bytes
|
|
|length
|
|
|Size in bytes of the checksum that immediately follows this entry.
|
|
|===
|
|
|
|
==== Checksum algorithms
|
|
|
|
[cols="2,2,6",options="header"]
|
|
|===
|
|
|Type
|
|
|Value
|
|
|Description
|
|
|
|
|Invalid
|
|
|0
|
|
|Invalid checksum entry, skip.
|
|
|
|
|Md5
|
|
|1
|
|
|MD5
|
|
|
|
|Sha1
|
|
|2
|
|
|SHA1
|
|
|
|
|Sha256
|
|
|3
|
|
|SHA-256
|
|
|
|
|SpamSum
|
|
|4
|
|
|SpamSum
|
|
|===
|