.changelog/3543.md
DiscSerialExtractorPlugin protocol in PVHashing with a DiscSerialExtractorRegistry singleton; built-in plugins for PSX/PS2 (ISO 9660 + SYSTEM.CNF), Sega Saturn/SegaCD/Dreamcast (IP.BIN header), GameCube/Wii (disc ID), BIN+CUE (track resolver), NDS ROM header, M3U multi-disc playlists, Dreamcast GDI format, and CHD v5 uncompressed archives..m3u multi-disc playlists and delegates serial extraction to the registry for the first listed disc image.SegaDiscSerialPlugin.libchdr integration.Data.loadBE32 / Data.loadBE64 — Big-endian integer helpers added to Data+DiscSerial for CHD header parsing.BinCueDiscSerialPlugin no longer skips ISODiscSerialPlugin when the data track is a .bin file (the extension check was incorrectly gating the ISO extractor, causing all PSX CUE+BIN images to return nil).GameCubeDiscSerialPlugin now recognises WBFS container files by their "WBFS" magic bytes at offset 0 (previously the GC/Wii magic check at offsets 0x18/0x1C always failed for WBFS files, returning nil).Data? return — DiscSerialExtractorRegistry.readHeader now correctly handles the Data? return of FileHandle.read(upToCount:) on Linux.#if canImport(CryptoKit) guard so the module compiles on Linux using swift-crypto instead of the Apple-only CryptoKit framework.