Katsuba

Latest version: v0.2.2

Safety actively analyzes 714772 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 2

0.8.6

This is a bugfix release for ObjectProperty deserialization.

- Bitflag properties encoded as an empty string now decode correctly to value `0`.
- Skipping unknown server types can result in faulty OOB reads sometimes. This was resolved.

This affects both the CLI and the `katsuba` Python package.

0.8.5

This release bumps Rust dependencies, fixes some bugs, and adds new features to the Python scripting API.

CLI

- A bug was fixed in `wad unpack` where files larger than the fixed bucket sizes could not be extracted.

Python

- Documented type stubs were added for the entire API.
- `LazyObject.items()` is now supported as a means for iterating over the properties of an object.
- `TypeList.open_many()` opens multiple type list files and merge them into one object.
- `TypeList.name_for()` translates a ObjectProperty type hash to the type name string.

0.8.4

This is mostly a bugfix release for some issues with the CLI.

- A `-f` argument was added to `wad pack` to customize archive flags in the WAD header.
- This specifically helps with packing `Root.wad`s that a client will accept.
- 34 was fixed by introducing a proper error message for the described case.
- A race condition in `wad unpack` was fixed where files may be written to output directories while these are still being created in the threadpool, resulting in an obscure error message.
- Unpacking will now wait for all directories to be created before submitting any file writes to the executor.

As always, a Windows build is attached below. Enjoy!

0.8.3

This release adds support for the `wad pack` CLI command which allows creating a KIWAD archive from a given directory and ObjectProperty compatibility with Pirate101.

CLI

- Support for `wad pack` was added.
- The `op` commands now accept a `-d/--djb2-only` flag for Pirate101 compatibility.
- The usage is otherwise identical to Wizard101.

ObjectProperty

- `SerializerOptions` was extended with `djb2_only` for Pirate101 compatibility.
- `Value::Object` will contain a compatible hash for Wizard101/Pirate101, depending on
the previously set configuration flag.

Python

- Adds a property for `djb2_only` to `SerializerOptions`.

Types

`katsuba-types` was extended with the newly discovered `PropertyFlags` from Pirate101.

0.8.1

This release contains stability improvements and fixes a regression in how WAD files are treated.

CLI

* The `-c` flag was removed from `wad unpack` since the checks are now mandatory.
* The performance impact from this is marginal thanks to SIMD-optimized CRC calculation.

Executor

* Fixes OOM errors and overall slowness in batch-deserializing ObjectProperty state.
* This issue was introduced with the switch to multi-threaded processing and is resolved now.

WAD

* `File`s are now marked with a new `is_unpatched` attribute which is detected during CRC verification.

As always, a Windows build is attached below. Enjoy!

0.8

This release combines months of work on improving existing components and adding requested features.

General

- The project has been renamed to `katsuba`.
- The Python bindings are now available as `katsuba` on PyPI for all relevant x86, x86_64 and AArch64 platforms.
- All crates now return proper error types instead of `anyhow::Result`.

Flake

- `nix build .katsuba-py` can now be used to build the Python bindings.

CLI

- A threadpool is now used for heavy I/O tasks. Performance gain has been measured on all tested platforms.
- The environment variable `KATSUBA_WORKER_THREADS` can be used to tweak the amount of threads in the pool.
- **WARNING:** More is not better and unless you know what you are doing just stick to the default configuration.
- Various subcommands now support logging at different verbosities using the `-v` option.
- Most commands now support glob patterns to process many input files at once.
- Reading input from stdin is now supported by using `-` in place of an input file path.
- A compact JSON representation will be emitted when `katsuba` output is piped into another application.

ClientSig

- A new crate `katsuba-client-sig` was introduced.
- Support for reading and dumping `ClientSig.bin` files from the game was added.
- This requires KingsIsle's private key which must be provided by the user.
- Appropriate CLI commands were added.

BCD

- Parsing errors were fixed.
- Structure was changed to match the actual file representation closer.

Python

- WAD archives now allow direct deserialization of ObjectProperty values without copying file contents between Rust and Python.
- ObjectProperty lists and objects now resolve their values lazily on access instead of converting the full object to a Python dict
immediately after deserialization.
- All the compound leaf types like `Euler`, `Quaternion`, `Color` now have a Pythonic object representation and can be told apart
from each other when encountered.
- This has been possible before too but it required knowledge of the deserialized class layout since all these compounds were
represented as tuples.
- `from katsuba.module import X` imports now work without raising an exception.
- The common KingsIsle hash functions from `katsuba-utils` are now accessible from Python.
- Support for NAV, POI, BCD has been preliminarily removed until we build a better object representation for them.
- Demand for those has never been high so I don't think they will be missed at the time being.

POI

- Parsing errors were fixed.
- Structure was changed to match the actual file representation closer.

Types

- Support for [wiztype](https://github.com/wizspoil/wiztype) JSONs in all formats was added.
- Katsuba automatically detects which one you supply.

ObjectProperty

- Support for `CoreObject` deserialization has been removed because it is too inconsistent and gets outdated.
- Users are encouraged to deserialize via library usage if this functionality is needed.
- `Value` has been shrunk to a size of 32 bytes.
- `Value::Object` now provides the type hash of the object so library users have access to this info.
- One reusable `Serializer` instance now provides all functionality.
- Support for guessing configuration based on an object's data was added.
- This does not reliably detect every case but it's a good enough starting point for reversing unknown objects.
- An appropriate CLI command has been added.

WAD

- Archives now report their UNIX file permissions, if available.
- The extractor uses this info to create files with the same permissions as the archive they originate from.
- `GlobIter` has been added to iterate over a subset of an archive's files given a glob pattern.

As always, a Windows build is attached below. Enjoy!

Page 1 of 2

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.