fix: read citron and suyu keys from KeysDir

Both profiles placed their keys in switch/, Batocera's folder. The code
reads them from KeysDir, <data>/keys, so the paths are keys/<name> and the
profiles declare the data folders, the portable user folder and the
KeysDir handle. Batocera and KNULLI keep citron's keys in bios/switch,
EmuDeck places each emulator's in its linked bios/<emulator>/keys,
RetroBat in emulators/citron/user/keys, and KNULLI's suyu, which keeps
its data in /userdata/saves/switch, names them as read outside the BIOS
folder.
This commit is contained in:
Abdessamad Derraz committed 2026-11-09 19:29:18 +01:00
1 parent 62f9ea6a76
commit d2546e557f
2 files changed
+28 -14

No files matched your search

+14 -7
View File
@@ -16,36 +16,43 @@ systems: [nintendo-switch]
analysis_date: "2026-03-26"
analysis_commit: "79dee42 (depth=1)"
mode: standalone
standalone_directories:
- "$XDG_DATA_HOME/citron"
- "$HOME/.local/share/citron"
- "PORTABLE_DIR"
- "CitronPath::KeysDir = keys"
# Citron is a community fork of yuzu, continued by Zephyron after yuzu's takedown.
# Key files loaded from <data_dir>/keys/ (fs_paths.h:18, path_util.cpp:124).
# On Linux: $XDG_DATA_HOME/citron/keys/
# On Batocera: XDG_DATA_HOME=/userdata/saves/switch -> /userdata/saves/switch/citron/keys/
# Key files loaded from <data_dir>/keys/ (fs_paths.h:18, path_util.cpp:124),
# the folder path_util.cpp generates as CitronPath::KeysDir. The paths below
# are relative to the data folder: $XDG_DATA_HOME/citron on Linux, or the
# user folder (PORTABLE_DIR) beside the executable when it exists.
# On Batocera: 002-adjust-paths.patch sets KeysDir to /userdata/bios/switch.
# Firmware NCAs are installed into NAND via UI (main.cpp:1808), not placed as files.
# HLE fallbacks exist for fonts, timezone, system version, mii model, ng word lists.
files:
- name: "prod.keys"
required: true
path: "switch/prod.keys"
path: "keys/prod.keys"
note: "Production keys for NCA decryption (master, key area, header, titlekek)"
source_ref: "src/core/crypto/key_manager.cpp:655-656"
- name: "title.keys"
required: false
path: "switch/title.keys"
path: "keys/title.keys"
note: "Per-title encryption keys (rights_id to titlekey mappings)"
source_ref: "src/core/crypto/key_manager.cpp:659-660"
- name: "console.keys"
required: false
path: "switch/console.keys"
path: "keys/console.keys"
note: "Console-specific keys (BIS, SD seed)"
source_ref: "src/core/crypto/key_manager.cpp:661-662"
- name: "key_retail.bin"
required: false
path: "switch/key_retail.bin"
path: "keys/key_retail.bin"
size: 160
note: "Amiibo decryption keys (two InternalKey structs, 0x50 bytes each)"
source_ref: "src/core/hle/service/nfc/common/amiibo_crypto.cpp:274-292"
+14 -7
View File
@@ -16,11 +16,18 @@ systems: [nintendo-switch]
analysis_date: "2026-03-26"
analysis_commit: "c096d16 (Hengle/suyu-emu mirror, depth=1)"
mode: standalone
standalone_directories:
- "$XDG_DATA_HOME/suyu"
- "$HOME/.local/share/suyu"
- "PORTABLE_DIR"
- "SuyuPath::KeysDir = keys"
# Suyu is a community fork of yuzu, started after yuzu's legal takedown.
# Key files loaded from <data_dir>/keys/ (fs_paths.h:20, path_util.cpp:124).
# On Linux: $XDG_DATA_HOME/suyu/keys/
# On Windows: %APPDATA%/suyu/keys/
# Key files loaded from <data_dir>/keys/ (fs_paths.h:20, path_util.cpp:124),
# the folder path_util.cpp generates as SuyuPath::KeysDir. The paths below
# are relative to the data folder: $XDG_DATA_HOME/suyu on Linux,
# %APPDATA%/suyu on Windows, or the user folder (PORTABLE_DIR) beside the
# executable when it exists.
# Firmware NCAs are installed via UI, not placed as files.
# HLE fallbacks exist for fonts, timezone, system version, mii model, ng word lists.
# Original repos (GitHub + GitLab) are DMCA'd. Analysis from community mirror.
@@ -28,25 +35,25 @@ mode: standalone
files:
- name: "prod.keys"
required: true
path: "switch/prod.keys"
path: "keys/prod.keys"
note: "Production keys for NCA decryption (master, key area, header, titlekek)"
source_ref: "src/core/crypto/key_manager.cpp:654"
- name: "title.keys"
required: false
path: "switch/title.keys"
path: "keys/title.keys"
note: "Per-title encryption keys (rights_id to titlekey mappings)"
source_ref: "src/core/crypto/key_manager.cpp:657"
- name: "console.keys"
required: false
path: "switch/console.keys"
path: "keys/console.keys"
note: "Console-specific keys (BIS, SD seed)"
source_ref: "src/core/crypto/key_manager.cpp:658"
- name: "key_retail.bin"
required: false
path: "switch/key_retail.bin"
path: "keys/key_retail.bin"
size: 160
note: "Amiibo decryption keys (two InternalKey structs, 0x50 bytes each)"
source_ref: "src/core/hle/service/nfc/common/amiibo_crypto.cpp:273-294"