mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-29 22:20:48 +00:00
Crypto: interpret metadata versions
This commit is contained in:
parent
1762324702
commit
22d01e4d05
@ -276,10 +276,11 @@ bool pkg_install(const std::string& path, atomic_t<double>& sync)
|
|||||||
}
|
}
|
||||||
case 0x5:
|
case 0x5:
|
||||||
{
|
{
|
||||||
if (packet.size == sizeof(metadata.package_revision))
|
if (packet.size == sizeof(metadata.package_revision.data))
|
||||||
{
|
{
|
||||||
archive_read(&metadata.package_revision, sizeof(metadata.package_revision));
|
archive_read(&metadata.package_revision.data, sizeof(metadata.package_revision.data));
|
||||||
pkg_log.notice("Metadata: Package Revision = 0x%x", metadata.package_revision, metadata.package_revision);
|
metadata.package_revision.interpret_data();
|
||||||
|
pkg_log.notice("Metadata: Package Revision = %s", metadata.package_revision.to_string());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -312,10 +313,11 @@ bool pkg_install(const std::string& path, atomic_t<double>& sync)
|
|||||||
}
|
}
|
||||||
case 0x8:
|
case 0x8:
|
||||||
{
|
{
|
||||||
if (packet.size == sizeof(metadata.software_revision))
|
if (packet.size == sizeof(metadata.software_revision.data))
|
||||||
{
|
{
|
||||||
archive_read(&metadata.software_revision, sizeof(metadata.software_revision));
|
archive_read(&metadata.software_revision.data, sizeof(metadata.software_revision.data));
|
||||||
pkg_log.notice("Metadata: Software Revision = 0x%x", metadata.software_revision, metadata.software_revision);
|
metadata.software_revision.interpret_data();
|
||||||
|
pkg_log.notice("Metadata: Software Revision = %s", metadata.software_revision.to_string());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "Utilities/BEType.h"
|
#include "Utilities/BEType.h"
|
||||||
|
#include <sstream>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
// Constants
|
// Constants
|
||||||
enum
|
enum
|
||||||
@ -80,12 +82,81 @@ struct PKGEntry
|
|||||||
// https://www.psdevwiki.com/ps3/PKG_files#PKG_Metadata
|
// https://www.psdevwiki.com/ps3/PKG_files#PKG_Metadata
|
||||||
struct PKGMetaData
|
struct PKGMetaData
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
|
static std::string to_hex_string(u8 buf[], size_t size)
|
||||||
|
{
|
||||||
|
std::stringstream sstream;
|
||||||
|
for (size_t i = 0; i < size; i++)
|
||||||
|
{
|
||||||
|
sstream << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(buf[i]);
|
||||||
|
}
|
||||||
|
return sstream.str();
|
||||||
|
}
|
||||||
|
static std::string to_hex_string(u8 buf[], size_t size, size_t dotpos)
|
||||||
|
{
|
||||||
|
std::string result = to_hex_string(buf, size);
|
||||||
|
if (result.size() > dotpos)
|
||||||
|
{
|
||||||
|
result.insert(dotpos, 1, '.');
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
public:
|
||||||
be_t<u32> drm_type{ 0 };
|
be_t<u32> drm_type{ 0 };
|
||||||
be_t<u32> content_type{ 0 };
|
be_t<u32> content_type{ 0 };
|
||||||
be_t<u32> package_type{ 0 };
|
be_t<u32> package_type{ 0 };
|
||||||
be_t<u64> package_size{ 0 };
|
be_t<u64> package_size{ 0 };
|
||||||
be_t<u32> package_revision{ 0 };
|
|
||||||
be_t<u64> software_revision{ 0 };
|
struct package_revision
|
||||||
|
{
|
||||||
|
struct package_revision_data
|
||||||
|
{
|
||||||
|
u8 make_package_npdrm_ver[2];
|
||||||
|
u8 version[2];
|
||||||
|
} data {};
|
||||||
|
|
||||||
|
std::string make_package_npdrm_ver;
|
||||||
|
std::string version;
|
||||||
|
|
||||||
|
void interpret_data()
|
||||||
|
{
|
||||||
|
make_package_npdrm_ver = to_hex_string(data.make_package_npdrm_ver, sizeof(data.make_package_npdrm_ver));
|
||||||
|
version = to_hex_string(data.version, sizeof(data.version), 2);
|
||||||
|
}
|
||||||
|
std::string to_string()
|
||||||
|
{
|
||||||
|
return fmt::format("make package npdrm version: %s, version: %s", make_package_npdrm_ver, version);
|
||||||
|
}
|
||||||
|
} package_revision;
|
||||||
|
|
||||||
|
struct software_revision
|
||||||
|
{
|
||||||
|
struct software_revision_data
|
||||||
|
{
|
||||||
|
u8 unk[1];
|
||||||
|
u8 firmware_version[3];
|
||||||
|
u8 version[2];
|
||||||
|
u8 app_version[2];
|
||||||
|
} data {};
|
||||||
|
|
||||||
|
std::string unk; // maybe hardware id
|
||||||
|
std::string firmware_version;
|
||||||
|
std::string version;
|
||||||
|
std::string app_version;
|
||||||
|
|
||||||
|
void interpret_data()
|
||||||
|
{
|
||||||
|
unk = to_hex_string(data.unk, sizeof(data.unk));
|
||||||
|
firmware_version = to_hex_string(data.firmware_version, sizeof(data.firmware_version), 2);
|
||||||
|
version = to_hex_string(data.version, sizeof(data.version), 2);
|
||||||
|
app_version = to_hex_string(data.app_version, sizeof(data.app_version), 2);
|
||||||
|
}
|
||||||
|
std::string to_string()
|
||||||
|
{
|
||||||
|
return fmt::format("unk: %s, firmware version: %s, version: %s, app version: %s", unk, firmware_version, version, app_version);
|
||||||
|
}
|
||||||
|
} software_revision;
|
||||||
|
|
||||||
std::string title_id;
|
std::string title_id;
|
||||||
std::string install_dir;
|
std::string install_dir;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user