pretendo-docker/scripts/get-boss-keys.sh
Matthew Lopez 05a67989cd
Rewrite scripts and improve user-friendliness
- Update all of the scripts to use Bash instead of sh so I can use arrays and other bashisms
- Create a complete Bash option parsing framework to replace function-lib.sh
- Rewrite all of the scripts to use this framework
- General script user-friendliness improvements, including loading existing environment variables by default instead of always requiring them to be specified
2024-05-10 17:22:25 -04:00

62 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# shellcheck source=./internal/framework.sh
source "$(dirname "$(realpath "$0")")/internal/framework.sh"
set_description "This validates the BOSS keys from the dumped key files in console-files by comparing them to expected \
MD5 hashes."
add_option "-w --write" "write_keys" "Write the encryption keys to the BOSS environment file after validating"
parse_arguments "$@"
expected_ds_aes_key_hash="86fbc2bb4cb703b2a4c6cc9961319926"
expected_wiiu_aes_key_hash="5202ce5099232c3d365e28379790a919"
expected_wiiu_hmac_key_hash="b4482fef177b0100090ce0dbeb8ce977"
cd "$git_base_dir/console-files"
if [[ -f "./boss_keys.bin" ]]; then
wiiu_aes_key=$(head -c 16 <./boss_keys.bin)
wiiu_hmac_key=$(tail -c +33 ./boss_keys.bin | head -c 64)
wiiu_aes_key_hash=$(echo -n "$wiiu_aes_key" | md5sum | cut -d ' ' -f 1)
wiiu_hmac_key_hash=$(echo -n "$wiiu_hmac_key" | md5sum | cut -d ' ' -f 1)
if [[ "$wiiu_aes_key_hash" = "$expected_wiiu_aes_key_hash" ]]; then
print_success "Found valid Wii U BOSS AES key."
if [[ -n "$write_keys" ]]; then
echo "PN_BOSS_CONFIG_BOSS_WIIU_AES_KEY=$wiiu_aes_key" >>"$git_base_dir/environment/boss.local.env"
fi
else
print_error "Wii U BOSS AES key has the wrong hash! Try re-running full_keys_dumper."
exit 1
fi
if [[ "$wiiu_hmac_key_hash" = "$expected_wiiu_hmac_key_hash" ]]; then
print_success "Found valid Wii U HMAC key."
if [[ -n "$write_keys" ]]; then
echo "PN_BOSS_CONFIG_BOSS_WIIU_HMAC_KEY=$wiiu_hmac_key" >>"$git_base_dir/environment/boss.local.env"
fi
else
print_error "Wii U BOSS HMAC key has the wrong hash! Try re-running full_keys_dumper."
exit 1
fi
else
print_warning "console-files/boss_keys.bin (Wii U) not found! Please read the README for instructions on dumping your BOSS keys."
fi
if [[ -f "./aes_keys.txt" ]]; then
ds_aes_key=$(grep -oP 'slot0x38KeyN=\K.*' ./aes_keys.txt)
ds_aes_key_bin=$(echo -n "$ds_aes_key" | xxd -r -p)
ds_aes_key_hash=$(echo -n "$ds_aes_key_bin" | md5sum | cut -d ' ' -f 1)
if [[ "$ds_aes_key_hash" = "$expected_ds_aes_key_hash" ]]; then
print_success "Found valid 3DS BOSS AES key."
if [[ -n "$write_keys" ]]; then
echo "PN_BOSS_CONFIG_BOSS_3DS_AES_KEY=$ds_aes_key" >>"$git_base_dir/environment/boss.local.env"
fi
else
print_error "3DS BOSS AES key has the wrong hash! Try re-running DumpKeys.gm9."
exit 1
fi
else
print_warning "console-files/aes_keys.txt (3DS) not found! Please read the README for instructions on dumping your BOSS keys."
fi