diff --git a/tool/CMakeLists.txt b/tool/CMakeLists.txt
index 95b537f..68c638c 100644
--- a/tool/CMakeLists.txt
+++ b/tool/CMakeLists.txt
@@ -34,6 +34,10 @@ add_executable(aaruformattool
sfo.h
iso9660_mini.c
iso9660_mini.h
+ convert_ps3.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/../src/ps3/aes128.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/../src/ps3/ps3_crypto.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/../src/ps3/ps3_encryption_map.c
termbox2.h
)
diff --git a/tool/aaruformattool.h b/tool/aaruformattool.h
index f45c740..5d669e6 100644
--- a/tool/aaruformattool.h
+++ b/tool/aaruformattool.h
@@ -43,5 +43,7 @@ int cli_compare(const char *path1, const char *path2, bool use_long);
int convert(const char *input_path, const char *output_path, bool use_long);
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);
#endif // LIBAARUFORMAT_TOOL_AARUFORMATTOOL_H_
diff --git a/tool/commands.c b/tool/commands.c
index 361f416..92d1912 100644
--- a/tool/commands.c
+++ b/tool/commands.c
@@ -215,6 +215,34 @@ int cmd_inject_media_tag(int argc, char *argv[])
return result;
}
+int cmd_convert_ps3(int argc, char *argv[])
+{
+ struct arg_str *input_filename = arg_str1(NULL, NULL, "", "Input ISO or AaruFormat image");
+ struct arg_str *output_filename = arg_str1(NULL, NULL, "