Commit Graph
29 Commits
Author SHA1 Message Date
Matthew Jackson b152710f53 Bump to 1.2.3 2026-07-07 16:36:25 -07:00
Matthew Jackson ff63a4dfa9 v1.2.2: bump version (unified release) 2026-07-03 20:50:20 -07:00
Matthew Jackson c07467c84e v1.2.1: bump version (unified release) 2026-07-01 19:08:59 -07:00
Matthew Jackson 290fc6aafb v1.2.1: bump version 2026-07-01 17:30:25 -07:00
Matthew Jackson 2cc7c30fa3 Cargo: publish = false + git-pin libfreemkv (off crates.io)
keysources deps libfreemkv, now git-only, so keysources follows it off
crates.io. A committed [patch.crates-io] redirects the bare libfreemkv version
req to the git tag (local dev overrides to a path via the gitignored config).
2026-06-29 21:04:05 -07:00
Matthew Jackson f32f0bc282 v1.2.0: bump version + reconcile CHANGELOG to [1.2.0] 2026-06-28 23:34:19 -07:00
Matthew Jackson 567e5c7891 v1.1.0: bump version (unified release) 2026-06-28 18:19:57 -07:00
Matthew Jackson 17fcf6d8f9 KeydbSource owns keydb save + update
Move the keydb save/validation/atomic-write path out of libfreemkv onto
KeydbSource. New KeydbSource::save(bytes) validates + decompresses (zip /
gz / plain, decompressed-size capped) and crash-safely writes to the
source's OWN path (sibling-temp + fsync + rename + parent-dir fsync) —
not a hardcoded default, so the caller chooses the destination.
KeydbSource::update(fetch, url) calls an INJECTED fetch closure then
save, keeping this crate transport-agnostic on the update path (the app
supplies its own TLS / SSRF-guarded transport). UpdateResult moves here
and is re-exported. Add flate2 + zip (already in the resolved graph via
libfreemkv) for decompression; no new HTTP stack.
2026-06-26 17:34:03 -07:00
Matthew Jackson 946632d9fb Restore AACS PK key-processing path in keysources
unit_keys_from now resolves the Media Key in order: stored per-disc MK
-> keydb Processing Key pool (mk_from_pk vs this disc's own MKB) ->
device-key pool (mk_from_dk), then MK+VID -> VUK -> UK. MK/VUK entries
still honored directly; cross-disc MK-pool brute stays retired. Fixes the
factually-wrong justifying comment + adds PK-pool KATs.
2026-06-26 17:03:58 -07:00
Matthew Jackson 699a2872fb v1.0.0-rc.5.3: bump version (unified release) 2026-06-24 21:55:08 -07:00
Matthew Jackson 2d0d0e3966 v1.0.0-rc.5.2: bump version (unified release) 2026-06-24 17:19:48 -07:00
Matthew Jackson a4d94d4ce3 v1.0.0-rc.5.1: bump version (unified release) 2026-06-24 14:43:34 -07:00
Matthew Jackson 2b025ab5fe v1.0.0-rc.5: bump version (unified release) 2026-06-24 10:35:11 -07:00
Matthew Jackson cced7818d2 v1.0.0-rc.4.3: bump version (unified release) 2026-06-23 15:53:02 -07:00
Matthew Jackson c247f02894 v1.0.0-rc.4.2: bump version (unified release) 2026-06-23 12:41:44 -07:00
Matthew Jackson a35f3cf84a v1.0.0-rc.4.1: bump version (unified release) 2026-06-23 10:46:48 -07:00
Matthew Jackson 26f4c864b5 v1.0.0-rc.4: bump version (unified release) 2026-06-23 09:46:59 -07:00
Matthew Jackson 6f164ca355 v1.0.0-rc.3.1: online key-service auth header + cross-OS keydb search paths (paths.rs) 2026-06-22 18:09:48 -07:00
Matthew Jackson 2987792328 v1.0.0-rc.3: bump version 2026-06-22 16:19:11 -07:00
Matthew Jackson 268e1d6bf2 v1.0.0-rc.2: bump version (unified release with libfreemkv 1.0.0-rc.2) 2026-06-22 09:17:07 -07:00
Matthew Jackson 3957ac70c1 v1.0.0-rc.1
key sources (keydb/online/mapfile), overflow-safe LBA
2026-06-21 21:06:07 -07:00
Matthew Jackson d23fcbd094 0.31.0: build against libfreemkv 0.31; add self-contained leak-guard CI; thin LTO release profile 2026-06-07 17:53:23 -07:00
MattJackson 68a2e51bf7 v0.30.0: OnlineSource forwards the disc title to the key service
OnlineSource::query() now includes the disc's volume_label (UDF/ISO volume id)
as a plain-text `title` field in the /decode POST, so the key service can build
a disc_hash → title catalog from real rips. Depends on libfreemkv 0.30.
2026-06-06 09:05:48 -07:00
MattJackson f02a62595d v0.29.0: bump version + libfreemkv 0.29 2026-06-05 20:43:54 -07:00
MattJackson e3f452166b 0.28.0: pin libfreemkv to crates.io 0.28 (drop dev path) 2026-06-04 18:24:51 -07:00
MattJackson a4c6a4123a 0.28.0: version bump (keydb decoupling) 2026-06-04 16:41:04 -07:00
MattJackson c6f1ec1fcc OnlineSource: minimal client; POST to the configured URL verbatim
Drop unused tracing dep. The endpoint URL is taken from config as-is, so a
change on the service side is a config change, not a code change.
2026-06-04 15:33:34 -07:00
MattJackson 681e7a0295 Add OnlineSource and MapfileSource
OnlineSource: the remote key-service client (moved out of autorip), posting the
disc's Unit_Key_RO.inf + MKB + Volume ID + encrypted content samples to the
service and returning the resolved unit key as a terminal Key::Unit candidate.
Kept out of libfreemkv so the library stays network-free. Source-internal
failures (unreachable / status / parse) are logged and surface as "no
candidate" so the next source is tried.

MapfileSource: reads a rip mapfile's persisted unit keys (the resume / deferred-
mux fast path) and offers them as a Key::Unit candidate. Keyed by mapfile path.

DiscInputs gained an app-populated `samples` field for sources that validate
against ciphertext server-side (OnlineSource); local sources ignore it.
2026-06-04 14:42:02 -07:00
MattJackson d2e0ecc2d4 freemkv-keysources: new crate — KeydbSource + ordered-resolve helper
The published key-source layer for libfreemkv. libfreemkv does no lookup; it
is handed a Key and derives down. This crate provides the KeySource impls that
do the lookup and hand a Key in. Applications choose and order the sources.

This first cut ships:
- KeydbSource: parses a local keydb.cfg and enumerates its material as ordered
  candidate keys (per-disc VUK/unit/media first, then the universal device-key,
  processing-key, and media-key pools). It does no derivation — the library
  walks the MKB and verifies media keys. Candidate ordering lets the library
  try each path a keydb can satisfy.
- resolve_first: tries each source's candidates in order and returns the first
  the caller's validator accepts (validate-before-return), so a stale entry
  falls through to the next source.

OnlineSource (remote key service) and MapfileSource (cached unit key) land with
the application wiring, where the sample-read and mapfile paths already live.
2026-06-04 14:35:54 -07:00