Skip to content

Releases: purelogiccode/RVZSharp

RVZSharp 1.1.1

Choose a tag to compare

@github-actions github-actions released this 11 Oct 05:33

RVZSharp 1.1.1 Release Notes

RVZSharp 1.1.1 is a correctness and packaging patch. The public API stays compatible
with 1.0.0 (validated at pack time against the published package via
PackageValidationBaselineVersion), so upgrading is a drop-in.

dotnet add package RVZSharp

What's new

Zstandard encoder memory (max level)

  • One-shot compression — ZstdEncoder now compresses each chunk with a single
    ZSTD_compress2 call (like Dolphin's ZstdCompressor) instead of a streaming
    session. A streaming session without a pledged source size reserves the level's full
    window before seeing any input (~128 MiB per worker at level 22), which exhausted
    memory when groups were compressed in parallel on modest machines; one-shot sizing
    caps the window at the chunk size. The output is unchanged standard Zstandard: a
    level-22 file decodes byte-identically in Dolphin's dolphin-tool.
  • Pinned by Zstd_MaxLevel_ParallelRoundTrip plus a bidirectional dolphin-tool
    interop matrix (zstd, lzma, lzma2, bzip2, none at 2 MiB and 128 KiB blocks, both
    directions, SHA-1-compared against real game images).

Packaging

  • No more empty symbols package — the assemblies carry embedded portable PDBs, so
    the .snupkg build carried no symbol files and nuget.org rejected it; only the
    .nupkg ships now. Debuggers read the embedded PDBs directly.

CLI downloads (1.1.1 bundles)

The 1.1.1 bundles are framework-dependent single-file executables: install the
.NET 10 Runtime once, then unzip
and run:

File Platform
rvzsharp_v1.1.1_win-x64.zip Windows 10/11, x64
rvzsharp_v1.1.1_win-arm64.zip Windows 11, arm64
rvzsharp_v1.1.1_linux-x64.zip Linux, x64
rvzsharp_v1.1.1_linux-arm64.zip Linux, arm64
rvzsharp_v1.1.1_osx-x64.zip macOS, Intel
rvzsharp_v1.1.1_osx-arm64.zip macOS, Apple Silicon

Each zip holds the RVZSharp executable (RVZSharp.exe on Windows) plus LICENSE,
README.md, WhatsNew.md and THIRD-PARTY-NOTICES.md. Verify downloads against
SHA256SUMS.txt.

Trust, verified

  • 610 library tests on each of net8.0/net9.0/net10.0 plus 57 CLI tests and
    a 276-test real-file suite (90 GameCube/Wii RVZ games decoded against their official
    No-Intro SHA-1s and re-encoded back to the same hash), plus a full dolphin-tool
    codec interop matrix in both directions.
  • Audited against Dolphin's implementation and the rvz-1.0.3 Go reference; every
    divergence pinned by a regression test.

Install & documentation

NuGet RVZSharp 1.1.1
Docs the docs/ wiki — format specs, library API, CLI reference
Repository github.com/purelogiccode/RVZSharp

License

GPL-2.0-or-later — the RVZ/WIA format logic derives from
Dolphin, and the library is licensed under the
same terms Dolphin uses. All dependencies and third-party components are credited in
THIRD-PARTY-NOTICES.md.

RVZSharp 1.1.0

Choose a tag to compare

@github-actions github-actions released this 09 Oct 21:57

RVZSharp 1.1.0 Release Notes

RVZSharp 1.1.0 is a feature and correctness release. The public API stays compatible
with 1.0.0 (validated at pack time against the published package via
PackageValidationBaselineVersion), so upgrading is a drop-in.

dotnet add package RVZSharp

What's new

Formats & verification

  • Legacy writers — CisoWriter, WbfsWriter and TgcWriter complete the container
    matrix and are exposed as convert -f ciso|wbfs|tgc; all-zero blocks/clusters are
    stored absent, so scrubbed images shrink.
  • Wii verification — DiscVerifier walks every partition's h0/h1/h2/h3 hash tree
    plus the TMD/H3 tables and reports per-partition issues (verify --partitions).
  • Retail ticket keys — partition keys are decrypted from the ticket with the Wii
    common key (Dolphin: TicketReader::GetTitleKey), so verify --partitions, extract
    and RVZ writing work on real encrypted discs; RVZ/WIA inputs prefer the container's
    authoritative partition key. WiiVolume.GetTitleKey(ticket) exposes the decryption.
  • Extract fixes — tmd.bin/cert.bin/h3.bin are read at their partition-relative
    offsets, h3.bin is skipped for hashless discs, and partition headers are printed by
    extract --list.
  • WBFS fixes — hd_sector_count is relative to the stream position, and the disc
    header copy is written at offset 0x200 for tools that identify discs without
    decoding.
  • Zero-group decode — RVZ/WIA partition chunks that are entirely zeroes are decoded
    back to zeroes instead of rejecting the missing exception lists.

CLI

  • --json for convert and verify, - stdin/stdout piping, and
    rvzsharp completions bash|zsh|fish|powershell. Logs and progress go to stderr, so
    stdout stays machine-readable.
  • convert --verify honors Ctrl+C (exit code 130), writer progress reaches exactly
    1.0, and the update check never blocks help runs.
  • Extract path safety — -s paths and image file names can no longer escape the
    output folder; hostile names fail with a format error.

Performance & robustness

  • Thread-safe ReadAt with a 16 MiB LRU decoded-unit cache, binary-search area lookup
    and ArrayPool group reads.
  • Parallel group compression and parallel RVZ/WIA full-image decode (--threads,
    byte-identical output for any thread count); Native AOT/trimming validated.
  • IBlobReader.Length, the async API (CopyToAsync/ReadFullyAsync/WriteAsync),
    split plain ISO (game.part0.iso), BlobStream, DiscInfo, Scrub and path
    overloads.

CLI downloads (1.1.0 bundles)

The 1.1.0 bundles are framework-dependent single-file executables: install the
.NET 10 Runtime once, then unzip
and run. They are far smaller than the self-contained 1.0.0 bundles and now cover six
runtimes, including macOS:

File Platform
rvzsharp_v1.1.0_win-x64.zip Windows 10/11, x64
rvzsharp_v1.1.0_win-arm64.zip Windows 11, arm64
rvzsharp_v1.1.0_linux-x64.zip Linux, x64
rvzsharp_v1.1.0_linux-arm64.zip Linux, arm64
rvzsharp_v1.1.0_osx-x64.zip macOS, Intel
rvzsharp_v1.1.0_osx-arm64.zip macOS, Apple Silicon

Each zip holds the RVZSharp executable (RVZSharp.exe on Windows) plus LICENSE,
README.md, WhatsNew.md and THIRD-PARTY-NOTICES.md. Verify downloads against
SHA256SUMS.txt.

Upgrading from 1.0.0? The 1.0.0 bundles were self-contained; 1.1.0 bundles require the
.NET 10 Runtime to be installed.

Trust, verified

  • 609 library tests on each of net8.0/net9.0/net10.0 plus 57 CLI tests and
    a 276-test real-file suite (90 GameCube/Wii RVZ games decoded against their official
    No-Intro SHA-1s and re-encoded back to the same hash).
  • Audited against Dolphin's implementation and the rvz-1.0.3 Go reference; every
    divergence pinned by a regression test.

Install & documentation

NuGet RVZSharp 1.1.0
Docs the docs/ wiki — format specs, library API, CLI reference
Repository github.com/purelogiccode/RVZSharp

License

GPL-2.0-or-later — the RVZ/WIA format logic derives from
Dolphin, and the library is licensed under the
same terms Dolphin uses. All dependencies and third-party components are credited in
THIRD-PARTY-NOTICES.md.

v1.0.0

Choose a tag to compare

@purelogiccode-admin purelogiccode-admin released this 15 Aug 19:17

RVZSharp 1.0.0 Release Notes

A pure managed .NET library and CLI for reading/writing Dolphin RVZ disc images and
decoding the legacy GameCube/Wii formats — byte-for-byte, cross-checked against real games
and the official No-Intro SHA-1s.

dotnet add package RVZSharp

What's included

  • RVZ/WIA reader — full container validation (magic, versions, every SHA-1, structure
    rules) and random-access decoding back to the original disc image, byte-for-byte
  • Legacy decoders — GCZ, CISO/WBI, WBFS (incl. split files), TGC, NFS, plain ISO — all
    auto-detected through one Blob.Open(...)
  • RVZ writer — converts any supported image to RVZ like Dolphin does: all five codecs
    (None, BZip2, LZMA1, LZMA2, Zstd incl. negative "fast" levels), chunk sizes
    32 KiB–4 MiB, PRNG-junk packing with seed recovery, --scrub, progress reporting and
    cancellation
  • Wii partitions — SHA-1 hash trees (h0/h1/h2), hash exceptions, AES-128-CBC —
    decrypted/re-encrypted exactly like Dolphin produces
  • Targets: net8.0, net9.0, net10.0 — 100% managed, no native code
  • Fully documented API — XML docs on every public/internal type and member (shipped in
    the package)

Quick start

using RVZSharp;
using RVZSharp.Blobs;

using var blob = Blob.Open(@"game.rvz");   // any format, auto-detected
using var reader = RvzReader.Open(file);
var iso = reader.ReadFully();              // byte-exact ISO

using var output = File.Create(@"game.rvz");
RvzWriter.Write(Blob.Open(@"game.iso"), output,
    new RvzWriteOptions { Compression = CompressionType.Zstd, CompressionLevel = 5 });

CLI (rvzsharp):

rvzsharp header  -i game.rvz
rvzsharp verify  -i game.rvz -a sha1
rvzsharp convert -i game.iso -o game.rvz -f rvz -c zstd -l 5 -b 131072

Trust, verified

  • 410 tests — 313 synthetic round-trips (~30 s) plus a 97-test real-file suite decoding
    actual GameCube/Wii RVZ images against their official No-Intro DAT SHA-1s and re-encoding
    them back to the same hash, on machines with the games mounted
    (F:\Nintendo GameCube / F:\Nintendo Wii)
  • Audited against Dolphin's implementation and the rvz-1.0.3 Go reference; every
    divergence pinned by a regression test
  • Cross-platform: single-file self-contained binaries for Windows and Linux (x64 + arm64);
    the library runs on any platform the runtime supports

Install & documentation

NuGet RVZSharp 1.0.0
Docs the docs/ wiki — format specs, library API, CLI reference
Repository github.com/purelogiccode/RVZSharp

License

GPL-2.0-or-later — the RVZ/WIA format logic derives from
Dolphin, and the library is licensed under the
same terms Dolphin uses. All dependencies and third-party components (MIT LZMA decoder port,
MIT/public-domain runtime codecs, BSD Go reference) are credited in
THIRD-PARTY-NOTICES.md.

Assets

File Size
rvzsharp_v1.0.0_win-x64.zip 31.97 MB
rvzsharp_v1.0.0_win-arm64.zip 30.57 MB
rvzsharp_v1.0.0_linux-x64.zip 31.92 MB
rvzsharp_v1.0.0_linux-arm64.zip 30.08 MB

Full Changelog: https://github.com/purelogiccode/RVZSharp/commits/v1.0.0