hash library

RetroAchievements ROM and optical disc hashing module (rhash).

Migrated to Dart from RetroAchievements/rcheevos.

Classes

CompositeCdReader
Composite RcCdReader that automatically selects between ChdCdReader and Iso9660CdReader.
DefaultRcFileReader
Default RcFileReader implementation using dart:io and RandomAccessFile.
ExtractedZipRom
A ROM selected from a ZIP archive.
Iso9660CdReader
Built-in RcCdReader implementation for ISO 9660 optical discs (ISO, BIN, CUE).
MemoryRcFileReader
In-memory RcFileReader implementation for buffered data.
RcCdReader
Abstract CD/Disc reader interface for RetroAchievements optical media hashing.
RcDiscEntry
Disc entry representing a file or directory on a CD / ISO image.
RcFileReader
Abstract file reader interface for RetroAchievements ROM/disc hashing. Allows customizing file access (e.g., in-memory buffers, ZIP archives, CHD files).
RcHashIterator
Iterator for generating and cycling through RetroAchievements hashes for a given ROM / disc.
RcHashResult
Result of hashing a ROM or disc for RetroAchievements.

Enums

RcSeekOrigin
Seek origin for file reading.

Constants

rcHashCdTrackFirstData → const int
Special track selectors matching rcheevos RC_HASH_CDTRACK_*.
rcHashCdTrackFirstOfSecondSession → const int
rcHashCdTrackLargest → const int
rcHashCdTrackLast → const int

Functions

extractZipRom(String path, {RcFileReader fileReader = const DefaultRcFileReader(), Uint8List? directBytes}) → Future<Uint8List?>
Extracts the primary candidate ROM file bytes from a .zip archive.
extractZipRomEntry(String path, {RcFileReader fileReader = const DefaultRcFileReader(), Uint8List? directBytes}) → Future<ExtractedZipRom?>
Extracts the primary candidate ROM and preserves its inner filename so the platform-specific dispatcher can process it correctly.
hash3doDisc(String path, {RcCdReader cdReader = const CompositeCdReader()}) → Future<String?>
Hashes a 3DO disc image by parsing the OperaFS filesystem for LaunchMe and computing MD5(132-byte volume header + LaunchMe executable bytes).
hashArcade(String path, {RcFileReader fileReader = const DefaultRcFileReader(), Uint8List? directBytes}) → Future<String?>
Hashes an Arcade / FBNeo game according to RetroAchievements rcheevos rc_hash_arcade and rc_hash_neogeo_cart.
hashArduboy(String path, {RcFileReader fileReader = const DefaultRcFileReader(), Uint8List? directBytes}) → Future<String?>
Hashes an Arduboy game (.arduboy FX archive or .hex / text file).
hashArduboyFx(String path, {RcFileReader fileReader = const DefaultRcFileReader(), Uint8List? directBytes}) → Future<String?>
Hashes an Arduboy FX .arduboy archive by filtering only .hex and .bin files and hashing their sorted zip indices.
hashArduboyText(Uint8List bytes) → String
Normalizes text lines (appending \n per line) before computing MD5. Matches rc_hash_text in hash_rom.c.
hashAtari7800(Uint8List bytes) → List<String>
Hashes an Atari 7800 ROM image by checking for and stripping the 128-byte ATARI7800 header.
hashDreamcastDisc(String path, {RcCdReader cdReader = const CompositeCdReader()}) → Future<String?>
Hashes a Sega Dreamcast disc image by reading the 256-byte IP.BIN header and the boot executable (1ST_READ.BIN).
hashGamecubeDisc(String path, {RcFileReader fileReader = const DefaultRcFileReader()}) → Future<String?>
Hashes a GameCube disc image (.iso, .gcm, .ciso) by computing MD5(header + apploader + 18 main.dol segments).
hashJaguarCd(String path, {RcCdReader cdReader = const CompositeCdReader()}) → Future<String?>
Hashes an Atari Jaguar CD boot executable, including the homebrew KART fallback used by rcheevos.
hashLynx(Uint8List bytes) → List<String>
Hashes an Atari Lynx ROM image by checking for and stripping the 64-byte LYNX header.
hashMsDos(String path, {RcFileReader fileReader = const DefaultRcFileReader(), Uint8List? directBytes}) → Future<String?>
Hashes an MS-DOS .dosz or .zip archive according to RetroAchievements rcheevos rc_hash_ms_dos.
hashN64(String path, {RcFileReader fileReader = const DefaultRcFileReader(), Uint8List? directBytes}) → Future<String?>
Hashes a Nintendo 64 ROM image by normalizing its endianness to standard big-endian (.z64) before computing the MD5 hash.
hashNeoGeoCd(String path, {RcCdReader cdReader = const CompositeCdReader()}) → Future<String?>
Hashes a Neo Geo CD disc image by finding IPL.TXT and hashing each referenced .PRG file.
hashNintendo3ds(String path, {RcFileReader fileReader = const DefaultRcFileReader(), Uint8List? directBytes}) → Future<String?>
Hashes unencrypted Nintendo 3DS NCSD/NCCH/CIA, 3DSX, and ELF images.
hashNintendoDs(String path, {RcFileReader fileReader = const DefaultRcFileReader(), Uint8List? directBytes}) → Future<String?>
Hashes a Nintendo DS / DSi ROM image by hashing the 352-byte header, the ARM9 executable, ARM7 executable, and 2560-byte icon/banner section.
hashPce(Uint8List bytes) → List<String>
Hashes a PC Engine / TurboGrafx-16 ROM image by checking for and stripping the 512-byte header.
hashPceCd(String path, {RcCdReader cdReader = const CompositeCdReader()}) → Future<String?>
Hashes a PC Engine CD or PC-FX disc image.
hashPcFxCd(String path, {RcCdReader cdReader = const CompositeCdReader()}) → Future<String?>
Hashes a PC-FX disc using its boot header and program sectors.
hashPs2Disc(String path, {RcCdReader cdReader = const CompositeCdReader()}) → Future<String?>
Hashes a PlayStation 2 (PS2) disc image by parsing SYSTEM.CNF for the BOOT2 executable, and computing MD5(exe_name + ELF binary bytes).
hashPs3(String path, {RcFileReader fileReader = const DefaultRcFileReader(), RcCdReader cdReader = const CompositeCdReader()}) → Future<String?>
Hashes a PlayStation 3 disc image or extracted/installed EBOOT.BIN.
hashPspIso(String path, {RcCdReader cdReader = const CompositeCdReader()}) → Future<String?>
Hashes a PSP ISO disc image by computing MD5(PSP_GAME/PARAM.SFO + PSP_GAME/SYSDIR/EBOOT.BIN).
hashPspPbp(String path, {RcFileReader fileReader = const DefaultRcFileReader()}) → Future<String?>
Hashes a PSP EBOOT.PBP container as a whole file, matching rcheevos.
hashPsxDisc(String path, {RcCdReader cdReader = const CompositeCdReader()}) → Future<String?>
Hashes a PlayStation 1 (PSX) disc image by parsing SYSTEM.CNF for the boot executable, and computing MD5(exe_name + executable bytes).
hashScv(Uint8List bytes) → List<String>
Hashes an Epoch Super CassetteVision ROM image by checking for and stripping the 32-byte EmuSCV header.
hashSegaCdDisc(String path, {RcCdReader cdReader = const CompositeCdReader()}) → Future<String?>
Hashes a Sega CD or Sega Saturn disc image by reading the first 512 bytes of sector 0.
hashSnesStripped(Uint8List bytes) → String?
Computes the SNES hash after stripping a 512-byte copier header when the file is 512 bytes larger than a multiple of 8 KiB.
hashWiiDisc(String path, {RcFileReader fileReader = const DefaultRcFileReader()}) → Future<String?>
Hashes a Nintendo Wii disc image or WiiWare container.
rcHashCompute({String? path, Uint8List? buffer, int? consoleId, RcFileReader fileReader = const DefaultRcFileReader(), RcCdReader? cdReader}) → Future<RcHashResult?>
Convenience function to compute full RcHashResult with primary and alternate hashes.
rcHashGenerate({String? path, Uint8List? buffer, int? consoleId, RcFileReader fileReader = const DefaultRcFileReader(), RcCdReader? cdReader}) → Future<String?>
Convenience function to generate the primary RetroAchievements hash for a file or buffer.