diff --git a/tool/CMakeLists.txt b/tool/CMakeLists.txt
index 5086fa8..4b61e88 100644
--- a/tool/CMakeLists.txt
+++ b/tool/CMakeLists.txt
@@ -35,9 +35,13 @@ add_executable(aaruformattool
iso9660_mini.c
iso9660_mini.h
convert_ps3.c
+ convert_wiiu.c
+ wiiu_reader.c
+ wiiu_reader.h
${CMAKE_CURRENT_SOURCE_DIR}/../src/lib/aes128.c
${CMAKE_CURRENT_SOURCE_DIR}/../src/ps3/ps3_crypto.c
${CMAKE_CURRENT_SOURCE_DIR}/../src/ps3/ps3_encryption_map.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/../src/wiiu/wiiu_crypto.c
termbox2.h
)
diff --git a/tool/aaruformattool.h b/tool/aaruformattool.h
index 5d669e6..f93bdbe 100644
--- a/tool/aaruformattool.h
+++ b/tool/aaruformattool.h
@@ -45,5 +45,6 @@ int upgrade_ddt_to_alpha21(const char *path);
int inject_media_tag(const char *tag_type, const char *media_tag_file, const char *image_file);
int convert_ps3(const char *input_path, const char *output_path, const char *disc_key_hex, const char *data1_key_hex,
const char *ird_path);
+int convert_wiiu(const char *input_path, const char *output_path, const char *disc_key_hex);
#endif // LIBAARUFORMAT_TOOL_AARUFORMATTOOL_H_
diff --git a/tool/commands.c b/tool/commands.c
index 92d1912..8cd4a00 100644
--- a/tool/commands.c
+++ b/tool/commands.c
@@ -243,6 +243,29 @@ int cmd_convert_ps3(int argc, char *argv[])
return result;
}
+int cmd_convert_wiiu(int argc, char *argv[])
+{
+ struct arg_str *input_filename = arg_str1(NULL, NULL, "", "Input WUD, WUX, or AaruFormat image");
+ struct arg_str *output_filename = arg_str1(NULL, NULL, "